중첩 리스트(행렬)에서 특정 인덱스 위치의 요소들이 서로 동일한 행만 골라내어 출력해야 하는 경우, 리스트 컴프리헨션(list comprehension)과 'all' 연산자를 함께 사용하면 간결하게 해결할 수 있습니다.
예제 코드
my_list = [[7745, 6755, 87, 978], [727, 927, 845], [192, 997, 49], [98, 74, 27]]
print("The list is :")
print(my_list)
my_key = 1
print("The key is ")
print(my_key)
my_result = [element for element in my_list if all(str(i)[my_key] == str(element[0])[my_key] for i in element)]
print("The result is :")
print(my_result)실행 결과
The list is : [[7745, 6755, 87, 978], [727, 927, 845], [192, 997, 49], [98, 74, 27]] The key is 1 The result is : [[7745, 6755, 87, 978], [192, 997, 49]]
코드 설명
리스트 안에 여러 개의 리스트가 포함된 중첩 리스트(행렬)를 정의하고 콘솔에 출력합니다.
확인할 인덱스 값(key)을 정의한 뒤 콘솔에 표시합니다.
리스트 컴프리헨션으로 행렬의 각 행을 순회하며, 'all' 연산자를 사용해 해당 행의 모든 요소를 문자열로 변환했을 때 지정된 인덱스의 문자가 첫 번째 요소의 같은 위치 문자와 일치하는지 검사합니다.
조건을 만족하는 행들만 모아 새로운 리스트로 생성하고 변수에 할당합니다.
최종 결과를 콘솔에 출력합니다.
동작 원리 살펴보기
위 예제에서 인덱스 1을 기준으로 확인하면, 첫 번째 행 [7745, 6755, 87, 978]의 모든 숫자는 십의 자리(문자열 기준 두 번째 자리)가 '7'로 동일하므로 결과에 포함됩니다. 반면 [727, 927, 845]는 마지막 요소 845의 해당 자릿수가 '4'이므로 제외됩니다. 이처럼 문자열 인덱싱과 제너레이터 표현식을 조합하면 별도의 반복문 없이도 원하는 조건의 행을 손쉽게 필터링할 수 있습니다.