어떤 문제에서는 리스트 내 각 요소의 최솟값을 찾아야 할 때가 있습니다. 특히 행렬 연산을 다룰 때는 행렬의 각 열(column)에 대한 최솟값을 구해야 하는데, 행렬의 각 열은 사실상 '리스트의 리스트' 형태이기 때문에 이는 곧 리스트의 리스트에서 각 인덱스 위치별 최솟값을 찾는 것과 같습니다.
min()과 zip() 함수 활용하기
아래 예제에서는 min() 함수와 zip() 함수를 함께 사용합니다. zip() 함수는 여러 개의 리스트에서 같은 인덱스에 위치한 요소들을 하나로 묶어주는 역할을 합니다. 그런 다음 for 루프를 통해 zip()의 결과에 min() 함수를 적용하여 각 그룹의 최솟값을 구합니다.
예제 코드
List = [[90, 5, 46], [71, 33, 2], [9, 13, 70]]
print("List : " + str(List))
# min() + zip() 사용
result = [min(index) for index in zip(*List)]
print("minimum of each index in List : " + str(result))실행 결과
List : [[90, 5, 46], [71, 33, 2], [9, 13, 70]] minimum of each index in List : [9, 5, 2]
실행 결과를 보면 첫 번째 인덱스의 값들(90, 71, 9) 중 최솟값인 9, 두 번째 인덱스의 값들(5, 33, 13) 중 최솟값인 5, 세 번째 인덱스의 값들(46, 2, 70) 중 최솟값인 2가 순서대로 출력된 것을 확인할 수 있습니다.
map(), min(), zip() 함수 조합하기
위와 유사한 방식으로 map()과 zip()을 함께 사용할 수도 있습니다. 이 방법은 zip()의 결과에 min()을 적용하되, for 루프 대신 map() 함수를 사용한다는 점이 다릅니다.
예제 코드
List = [[0.5, 2.4, 7], [5.5, 1.9, 3.2], [8, 9.9, 10]]
print("The list values are: " + str(List))
# min() + map() + zip() 사용
result = list(map(min, zip(*List)))
# 결과 출력
print("Minimum of each index in list of lists is : " + str(result))실행 결과
The list values are: [[0.5, 2.4, 7], [5.5, 1.9, 3.2], [8, 9.9, 10]] Minimum of each index in list of lists is : [0.5, 1.9, 3.2]
두 방식 모두 동일한 결과를 반환하지만, 리스트 컴프리헨션(list comprehension)을 사용하는 첫 번째 방법이 코드 가독성 면에서 더 직관적이라는 평가를 받으며, map()을 활용하는 두 번째 방법은 함수형 프로그래밍 스타일을 선호하는 경우에 유용합니다. 상황과 취향에 맞게 적절한 방식을 선택하면 됩니다.