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

파이썬에서 합계가 가장 큰 특정 개수의 행만 출력하는 방법

리스트 안에 여러 개의 리스트(행)가 포함된 데이터에서, 각 행의 요소 합계를 기준으로 가장 큰 값을 가진 특정 개수의 행만 추출해야 하는 경우가 있습니다. 이럴 때 파이썬의 sorted 함수와 lambda 표현식을 함께 사용하면 매우 간단하게 해결할 수 있습니다.

예제 코드

아래는 합계가 가장 큰 상위 3개의 행을 추출하는 예시입니다.

my_list = [[2, 4, 6, 7], [2, 4, 8], [45], [1, 3, 5, 6], [8, 2, 1]]

print("The list is :")
print(my_list)

my_key = 3
print("The key is")
print(my_key)
my_result = sorted(my_list, key=lambda row: sum(row), reverse=True)[:my_key]

print("The resultant list is :")
print(my_result)

실행 결과

The list is :
[[2, 4, 6, 7], [2, 4, 8], [45], [1, 3, 5, 6], [8, 2, 1]]
The key is
3
The resultant list is :
[[45], [2, 4, 6, 7], [1, 3, 5, 6]]

코드 설명

  • 리스트 안에 리스트가 중첩된 형태의 데이터가 정의되고, 콘솔에 그대로 출력됩니다.

  • 추출할 행의 개수를 나타내는 키 값(my_key)이 정의되어 화면에 표시됩니다.

  • sorted 함수에 lambda row: sum(row)를 key 인자로 전달하면, 각 행의 모든 요소를 더한 합계를 기준으로 정렬이 수행됩니다.

  • reverse=True 옵션 덕분에 합계가 큰 순서대로 내림차순 정렬되며, 슬라이싱 [:my_key]를 통해 상위 3개의 행만 잘려나옵니다.

  • 실제로 [45]의 합은 45, [2, 4, 6, 7]의 합은 19, [1, 3, 5, 6]의 합은 15로, 세 행이 합계 기준 상위 3위에 해당합니다.

  • 최종 결과는 변수에 저장된 후 콘솔에 출력됩니다.

마무리

이처럼 sorted 함수의 key 인자와 lambda 표현식, 그리고 슬라이싱을 조합하면 별도의 반복문 없이 한 줄의 코드로 원하는 조건의 데이터를 손쉽게 필터링할 수 있습니다. 대량의 중첩 리스트 데이터를 다룰 때 유용하게 활용할 수 있는 패턴이니 꼭 기억해 두세요.