리스트에서 특정 범위의 요소들을 모두 포함하는 행만 필터링해야 하는 경우가 있습니다. 이럴 때 파이썬에서는 리스트 컴프리헨션(list comprehension)과 all() 연산자를 조합하여 간결하게 해결할 수 있습니다.
아래 예제를 통해 구체적인 사용 방법을 살펴보겠습니다.
예제 코드
my_list = [[3, 2, 4, 5, 10], [32, 12, 4, 51, 10],[12, 53, 11], [2, 3, 31, 5, 8, 7]]
print("The list is :")
print(my_list)
i, j = 2, 5
my_result = [index for index in my_list if all(element in index for element in range(i, j + 1))]
print("The result is :")
print(my_result)실행 결과
The list is : [[3, 2, 4, 5, 10], [32, 12, 4, 51, 10], [12, 53, 11], [2, 3, 31, 5, 8, 7]] The result is : [[3, 2, 4, 5, 10]]
코드 설명
먼저 리스트 안에 여러 개의 리스트(중첩 리스트)를 정의하고 콘솔에 출력합니다.
범위의 시작 값인 정수 'i'와 끝 값인 정수 'j'를 각각 2와 5로 정의합니다.
리스트 컴프리헨션을 사용하여 전체 리스트를 순회하면서, 각 하위 리스트가 앞서 정의한 두 정수로 지정된 범위(range(i, j + 1))의 모든 요소를 포함하는지 확인합니다.
all() 함수는 내부 제너레이터 표현식을 통해 범위 내 모든 요소가 해당 행에 존재하는지 검사하며, 하나라도 없으면 False를 반환합니다.
조건을 만족하는 행만 새로운 리스트로 변환되어 결과 변수에 할당됩니다.
최종 결과가 콘솔에 출력됩니다.
핵심 포인트
이 예제에서 range(i, j + 1)은 2부터 5까지의 요소 [2, 3, 4, 5]를 생성합니다. 네 개의 하위 리스트 중 이 요소들을 모두 포함하는 것은 [3, 2, 4, 5, 10]뿐이므로, 결과적으로 해당 리스트만 필터링되어 반환됩니다.
이 기법은 데이터 전처리 과정에서 특정 조건을 만족하는 레코드를 추출할 때 유용하게 활용될 수 있으며, 코드가 한 줄로 간결하여 가독성이 뛰어나다는 장점이 있습니다.