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

Python 이진 리스트에서 True 값의 인덱스 추출하는 방법

Python 리스트에 True/False 또는 0/1과 같은 값만 담겨 있을 때, 이를 이진 리스트(binary list)라고 부릅니다. 이번 글에서는 이진 리스트를 다루면서, 리스트 요소가 True로 평가되는 위치의 인덱스를 찾아내는 두 가지 방법을 소개합니다.

방법 1: enumerate() 활용하기

enumerate() 함수는 리스트를 순회하면서 각 요소와 함께 해당 인덱스도 함께 반환합니다. 여기에 조건문을 결합하면 값이 True로 평가되는 요소의 인덱스만 손쉽게 걸러낼 수 있습니다.

예제 코드

listA = [True, False, 1, False, 0, True]
# 원본 리스트 출력
print("원본 리스트 :\n ", listA)
# enumerate() 사용
res = [i for i, val in enumerate(listA) if val]
# 결과 출력
print("True 값을 가지는 인덱스 :\n ", res)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

원본 리스트 :
[True, False, 1, False, 0, True]
True 값을 가지는 인덱스 :
[0, 2, 5]

방법 2: itertools.compress() 활용하기

itertools 모듈의 compress() 함수를 사용하면 리스트의 각 요소를 순회하면서 값이 True인 항목만 선택할 수 있습니다. range(len(listA))와 함께 사용하면 조건에 맞는 인덱스만 추출할 수 있습니다.

예제 코드

from itertools import compress
listA = [True, False, 1, False, 0, True]
# 원본 리스트 출력
print("원본 리스트 :\n ", listA)
# compress() 사용
res = list(compress(range(len(listA)), listA))
# 결과 출력
print("True 값을 가지는 인덱스 :\n ", res)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

원본 리스트 :
[True, False, 1, False, 0, True]
True 값을 가지는 인덱스 :
[0, 2, 5]

정리

두 방법 모두 동일한 결과인 [0, 2, 5]를 반환합니다. Python에서는 1True로, 0False로 평가되기 때문에 정수 값이 섞여 있는 리스트에서도 동일하게 동작합니다. 일반적인 경우에는 가독성이 좋은 enumerate() 방식을, 성능이 중요한 대용량 데이터 처리에는 compress() 방식을 선택하는 것이 좋습니다.