Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python - 행렬에서 특정 인덱스의 요소가 모두 같은 행만 출력하기

중첩 리스트(행렬)에서 특정 인덱스 위치의 요소들이 서로 동일한 행만 골라내어 출력해야 하는 경우, 리스트 컴프리헨션(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'이므로 제외됩니다. 이처럼 문자열 인덱싱과 제너레이터 표현식을 조합하면 별도의 반복문 없이도 원하는 조건의 행을 손쉽게 필터링할 수 있습니다.