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

Python map() 함수를 활용해 1이 가장 많은 행 찾는 방법

이 튜토리얼에서는 Python의 map() 함수를 사용하여 행렬(2차원 리스트)에서 1의 개수가 가장 많은 행을 찾는 프로그램을 작성해 보겠습니다.

문제 정의

예를 들어 다음과 같은 행렬이 있다고 가정해 봅시다.

matrix = [ [0, 0, 1], [1, 1, 1], [1, 1, 0] ]

위 행렬에서 두 번째 행인 [1, 1, 1]은 1이 세 개로 가장 많으므로, 결과적으로 해당 행의 인덱스인 1을 출력해야 합니다.

풀이 접근 방법

같은 문제를 여러 가지 방식으로 해결할 수 있지만, 이번에는 map() 함수를 활용하여 아래와 같은 순서로 진행합니다.

  • 행렬을 초기화합니다.
  • map() 함수를 이용해 각 행마다 1의 개수를 구하고, 결과를 리스트에 저장합니다.
  • 리스트에서 최댓값의 위치(인덱스)를 출력합니다.

코드 예제

## 행렬 초기화
matrix = [
    [0, 0, 1],
    [1, 1, 1],
    [1, 1, 0]
]
## 한 행에서 1의 개수를 세는 함수
def number_of_ones(row):
    count = 0
    for i in row:
        if i == 1:
            count += 1
    return count
## 각 행의 1 개수를 구함
## map은 객체를 반환하므로 리스트로 변환
ones_count = list(map(number_of_ones, matrix))
## 리스트에서 최댓값의 인덱스 출력
print(ones_count.index(max(ones_count)))

참고: 원본 코드의 i is 1은 Python에서 권장되지 않는 비교 방식입니다. 값 비교에는 항상 == 연산자를 사용하는 것이 올바르며, 위 예제 코드에서도 이를 반영했습니다. 또한 sum(row)처럼 내장 함수를 활용하면 더 간결하게 작성할 수도 있습니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

1

동작 원리 살펴보기

map(number_of_ones, matrix)는 matrix의 각 행을 number_of_ones 함수에 하나씩 전달합니다. 그 결과 [1, 3, 2]라는 리스트가 만들어지고, max()로 최댓값 3을 찾은 뒤 .index() 메서드로 해당 값이 위치한 인덱스 1을 얻게 됩니다.

프로그램에 대해 궁금한 점이 있다면 댓글로 남겨 주세요.