파이썬에서 리스트(List)는 튜플(Tuple)을 요소로 가질 수 있습니다. 이번 글에서는 리스트에 담긴 튜플들 중에서 'Mon'과 같은 특정 문자열을 포함하는 튜플을 찾아내는 두 가지 방법을 예제와 함께 살펴보겠습니다.
1. in 연산자와 조건문 활용
리스트 컴프리헨션(list comprehension) 안에서 in 조건 뒤에 하나의 조건 또는 여러 조건의 조합을 명시할 수 있습니다. 아래 예제에서는 첫 번째 요소가 검색값과 일치하고, 동시에 두 번째 요소가 2 이상인 튜플만 추출합니다. 이처럼 복합적인 조건 검사가 필요할 때 특히 유용한 방식입니다.
예제 코드
listA = [('Mon', 3), ('Tue', 1), ('Mon', 2), ('Wed', 3)]
test_elem = 'Mon'
# 주어진 리스트
print("Given list:\n", listA)
print("Check value:\n", test_elem)
# for와 if를 활용한 필터링
res = [item for item in listA
if item[0] == test_elem and item[1] >= 2]
# 결과 출력
print("The tuples satisfying the conditions:\n ", res)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list:
[('Mon', 3), ('Tue', 1), ('Mon', 2), ('Wed', 3)]
Check value:
Mon
The tuples satisfying the conditions:
[('Mon', 3), ('Mon', 2)]
2. filter 함수와 lambda 활용
filter() 함수를 lambda 함수와 함께 사용하는 방식입니다. 필터 조건 안에서 in 연산자를 사용해 해당 요소가 튜플 내부에 존재하는지 여부를 검사합니다. 코드가 간결하고 가독성이 좋아, 단순히 요소의 포함 여부만 확인할 때 적합합니다.
예제 코드
listA = [('Mon', 3), ('Tue', 1), ('Mon', 2), ('Wed', 3)]
test_elem = 'Mon'
# 주어진 리스트
print("Given list:\n", listA)
print("Check value:\n", test_elem)
# lambda와 in을 활용한 필터링
res = list(filter(lambda x: test_elem in x, listA))
# 결과 출력
print("The tuples satisfying the conditions:\n ", res)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list:
[('Mon', 3), ('Tue', 1), ('Mon', 2), ('Wed', 3)]
Check value:
Mon
The tuples satisfying the conditions:
[('Mon', 3), ('Mon', 2)]
두 방법 비교 및 정리
리스트 컴프리헨션 방식은 인덱스를 통해 개별 요소에 접근하므로, 여러 조건을 조합한 복잡한 필터링에 유리합니다. 반면 filter()와 lambda를 조합한 방식은 in 연산자 하나만으로 튜플 전체에서 요소의 존재 여부를 확인할 수 있어 더 직관적입니다. 조건의 복잡도에 따라 상황에 맞는 방법을 선택해 사용하면 됩니다.