튜플로 구성된 레코드 목록에서 최댓값을 찾아야 할 때는 리스트 컴프리헨션(list comprehension)과 max 메서드를 활용하면 간단하게 해결할 수 있습니다.
리스트는 서로 다른 자료형의 값(정수, 실수, 문자열 등)을 하나의 자료구조에 함께 저장할 수 있습니다.
튜플 리스트란 리스트 안에 여러 개의 튜플이 포함된 형태를 말합니다. 리스트 컴프리헨션은 리스트를 반복하면서 특정 연산을 수행할 수 있도록 해주는 축약 문법으로, 코드를 더 간결하고 가독성 있게 만들어 줍니다.
max 메서드는 이터러블(iterable)에 포함된 모든 요소 중 가장 큰 값을 반환하는 내장 함수입니다.
아래는 이를 보여주는 예제입니다.
예제
my_list = [('Will', [67, 45, 89]), ('Jam', [34, 56,13]), ('Pow', [99, 123, 89]), ('Nyk', [0, 56, 5])]
print ("The list of tuples is : " )
print(my_list)
my_result = [(key, max(lst)) for key, lst in my_list]
print ("The maximum of list tuple attribute is : " )
print(my_result)출력 결과
The list of tuples is :
[('Will', [67, 45, 89]), ('Jam', [34, 56, 13]), ('Pow', [99, 123, 89]), ('Nyk', [0, 56, 5])]
The maximum of list tuple attribute is :
[('Will', 89), ('Jam', 56), ('Pow', 123), ('Nyk', 56)]설명
- 튜플로 이루어진 리스트를 정의한 뒤 콘솔에 출력합니다.
- 리스트 컴프리헨션을 사용해 리스트를 순회하면서, 언패킹(unpacking)을 통해 각 튜플의 키(key)와 리스트(lst)를 분리합니다.
- 각 튜플 내부 리스트에 대해
max함수를 적용하여 해당 값들 중 최댓값을 구합니다. - 연산 결과는 새로운 리스트 형태로 변수에 할당되며, 마지막에 콘솔에 출력됩니다.
참고: 대체 방법
리스트 컴프리헨션 대신 map과 lambda를 조합해도 동일한 결과를 얻을 수 있습니다.
my_result = list(map(lambda item: (item[0], max(item[1])), my_list))
두 방식 모두 시간 복잡도는 O(n × m)(n은 튜플 개수, m은 각 리스트의 길이)로 동일하므로, 상황에 맞게 가독성이 좋은 방식을 선택하면 됩니다.