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

Python – 튜플 요소의 곱이 K보다 큰 항목만 필터링하는 방법

파이썬에서 튜플 내부 요소들의 곱(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)]

이처럼 리스트 컴프리헨션과 곱셈 함수를 조합하면, 조건에 맞는 데이터를 손쉽게 추출할 수 있습니다. 대용량 데이터를 다룰 때는 제너레이터 표현식으로 바꿔 메모리 사용량을 줄이는 것도 좋은 방법입니다.