중첩 리스트(리스트 안의 리스트)를 다루다 보면, 특정 인덱스 위치의 요소가 조건과 일치하는 행만 골라내야 하는 경우가 자주 있습니다. 이럴 때는 복잡한 외부 라이브러리 없이 간단한 for 반복문과 append() 함수만으로도 손쉽게 해결할 수 있습니다.
예제 코드
다음은 두 개의 중첩 리스트를 비교하여, 지정된 인덱스 위치의 요소가 서로 일치하는 행을 찾아 반환하는 예제입니다.
my_list_1 = [[21, 81, 35], [91, 14, 0], [64, 61, 42]]
my_list_2 = [[21, 92, 63], [80, 19, 65], [54, 65, 36]]
print("첫 번째 리스트 :")
print(my_list_1)
print("두 번째 리스트 :")
print(my_list_2)
# 비교 기준이 될 인덱스 위치
my_key = 0
my_result = []
for index in range(len(my_list_1)):
# 각 행에서 my_key 위치의 요소가 두 리스트에서 일치하는지 확인
if my_list_1[index][my_key] == my_list_2[index][my_key]:
my_result.append(my_list_1[index])
print("결과 :")
print(my_result)
실행 결과
첫 번째 리스트 : [[21, 81, 35], [91, 14, 0], [64, 61, 42]] 두 번째 리스트 : [[21, 92, 63], [80, 19, 65], [54, 65, 36]] 결과 : [[21, 81, 35]]
코드 설명
- 리스트 정의: 비교 대상이 되는 두 개의 중첩 리스트를 정의하고 콘솔에 출력합니다.
- 키(인덱스) 설정: 비교 기준이 될 인덱스 값을
my_key변수에 저장합니다. 여기서는 0을 사용했으므로 각 행의 첫 번째 요소를 기준으로 비교합니다. - 빈 리스트 생성: 조건을 만족하는 행을 담기 위해 빈 리스트
my_result를 준비합니다. - 행 단위 비교: 첫 번째 리스트의 길이만큼 반복하면서, 두 리스트의 같은 위치에 있는 행에서
my_key인덱스의 요소가 일치하는지 확인합니다. - 조건 충족 시 저장: 요소가 일치하면 해당 행 전체를 결과 리스트에 추가(append)합니다.
- 결과 출력: 최종 결과를 콘솔에 출력합니다. 예제에서는 두 리스트의 첫 번째 행인
[21, 81, 35]와[21, 92, 63]의 첫 번째 요소가 모두 21로 일치하므로 이 행만 결과에 포함됩니다.
더 간결하게: 리스트 컴프리헨션 활용
같은 로직은 리스트 컴프리헨션(list comprehension)을 사용하면 한 줄로 표현할 수도 있습니다.
my_key = 0 my_result = [row for row, other in zip(my_list_1, my_list_2) if row[my_key] == other[my_key]] print(my_result) # [[21, 81, 35]]
zip() 함수를 사용하면 두 리스트를 동시에 순회할 수 있어 인덱스 관리가 한층 편리해집니다. 데이터 규모가 작다면 어떤 방식을 선택해도 무방하지만, 코드가 길어질수록 리스트 컴프리헨션과 zip()을 활용한 접근이 가독성과 유지보수 측면에서 더욱 유리합니다.