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

Python 튜플 리스트에서 최소 K개 레코드 찾는 방법

튜플로 구성된 리스트에서 최소 'K'개의 레코드를 추출해야 하는 경우, sorted 메서드와 lambda(람다) 함수를 조합하면 간단하게 해결할 수 있습니다.

핵심 개념 정리

sorted 메서드는 리스트의 요소들을 지정한 기준에 따라 정렬하는 내장 함수입니다. 여기서 정렬 기준을 정의하는 데 사용되는 것이 바로 익명 함수(anonymous function), 즉 람다 함수입니다.

일반적으로 Python에서 함수는 def 키워드를 사용해 이름을 붙여 정의하지만, 람다 함수는 lambda 키워드를 사용해 이름 없이 정의합니다. 람다 함수는 하나의 표현식만 가질 수 있지만, 인자는 원하는 만큼 여러 개 받을 수 있으며, 해당 표현식을 평가한 결과를 반환합니다.

리스트(list)는 정수, 실수, 문자열 등 서로 다른 데이터 타입의 값을 함께 저장할 수 있는 자료구조입니다. 그리고 튜플 리스트(list of tuples)란 리스트 안에 여러 개의 튜플이 담겨 있는 형태를 말합니다.

예제 코드

아래 예제를 통해 실제 동작 방식을 확인해 보겠습니다.

my_list = [(67, 'Will'), (34, 'Mark'), (99, 'Dev'), (2, 'Paul')]

print("The list is : ")
print(my_list)
K = 3
print("The value of 'K' has been initialized")

my_result = sorted(my_list, key = lambda x: x[1])[:K]

print("The lowest " + str(K) + " records are : ")
print(my_result)

실행 결과

The list is :
[(67, 'Will'), (34, 'Mark'), (99, 'Dev'), (2, 'Paul')]
The value of 'K' has been initialized
The lowest 3 records are :
[(99, 'Dev'), (34, 'Mark'), (2, 'Paul')]

코드 설명

  • 튜플들로 구성된 리스트를 정의하고 콘솔에 출력합니다.
  • 추출할 레코드의 개수인 'K' 값을 초기화합니다.
  • sorted 메서드가 람다 함수(x[1], 즉 각 튜플의 두 번째 요소인 이름)를 기준으로 튜플 리스트를 오름차순 정렬합니다.
  • 슬라이싱 [:K]를 통해 정렬된 결과 중 앞에서 K개의 요소만 잘라냅니다.
  • 최종 결과를 변수에 할당한 후 콘솔에 출력합니다.

참고: 대용량 데이터에는 heapq 활용

리스트의 크기가 매우 크고 K값이 작은 경우, 전체를 정렬하는 sorted보다 heapq.nsmallest를 사용하는 것이 성능 면에서 더 유리합니다.

import heapq

my_result = heapq.nsmallest(K, my_list, key=lambda x: x[1])

이 방법은 시간 복잡도 측면에서 효율적이므로, 데이터 규모에 따라 적절한 방법을 선택하면 됩니다.