파이썬에서 튜플 내부 요소들의 곱(product)이 특정 값 K보다 큰 튜플만 걸러내야 하는 상황이라면, 리스트 컴프리헨션(list comprehension)을 활용하면 가장 간결하고 파이썬다운 방식으로 해결할 수 있습니다. 이 글에서는 예제 코드와 함께 그 동작 원리를 단계별로 살펴봅니다.
예제 코드
아래는 튜플의 곱이 K보다 큰지 판별하여 필터링하는 전체 예제입니다.
def tuples_product(index):
my_result = 1
for element in index:
my_result *= element
return my_result
my_list = [(14, 25, 17), (2, 3, 5), (81, 42, 21), (6, 2, 1)]
print("The list is :")
print(my_list)
K = 15
print("The value of K is :")
print(K)
my_result = [index for index in my_list if tuples_product(index) > K]
print("The result is :")
print(my_result)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The list is : [(14, 25, 17), (2, 3, 5), (81, 42, 21), (6, 2, 1)] The value of K is : 15 The result is : [(14, 25, 17), (2, 3, 5), (81, 42, 21)]
코드 설명
tuples_product라는 이름의 함수가 정의됩니다. 이 함수는 튜플을 매개변수로 받아, 튜플에 포함된 모든 요소를 곱한 값을 반환합니다.함수 외부에서 튜플들을 담고 있는 리스트가 정의되며, 콘솔에 출력됩니다.
비교 기준이 되는 임계값 K가 정의되고, 역시 콘솔에 함께 출력됩니다.
리스트 컴프리헨션이 사용되어 리스트의 각 튜플을 순회하면서, 매번
tuples_product함수가 호출됩니다.함수가 반환한 곱셈 결과는 K와 비교됩니다.
곱이 K보다 큰 튜플만 새로운 리스트에 추가되며, 그 결과는
my_result변수에 할당됩니다.마지막으로 필터링된 최종 결과가 콘솔에 출력됩니다.
참고: math.prod 활용하기
파이썬 3.8 이상에서는 별도의 함수를 직접 작성하지 않고도 표준 라이브러리의 math.prod()를 사용해 같은 로직을 더 짧게 구현할 수 있습니다.
from math import prod my_list = [(14, 25, 17), (2, 3, 5), (81, 42, 21), (6, 2, 1)] K = 15 my_result = [index for index in my_list if prod(index) > K] print(my_result) # [(14, 25, 17), (2, 3, 5), (81, 42, 21)]
이처럼 리스트 컴프리헨션과 곱셈 함수를 조합하면, 조건에 맞는 데이터를 손쉽게 추출할 수 있습니다. 대용량 데이터를 다룰 때는 제너레이터 표현식으로 바꿔 메모리 사용량을 줄이는 것도 좋은 방법입니다.