리스트 안에 여러 개의 리스트(행)가 포함된 데이터에서, 각 행의 요소 합계를 기준으로 가장 큰 값을 가진 특정 개수의 행만 추출해야 하는 경우가 있습니다. 이럴 때 파이썬의 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 표현식, 그리고 슬라이싱을 조합하면 별도의 반복문 없이 한 줄의 코드로 원하는 조건의 데이터를 손쉽게 필터링할 수 있습니다. 대량의 중첩 리스트 데이터를 다룰 때 유용하게 활용할 수 있는 패턴이니 꼭 기억해 두세요.