행렬(matrix)의 여러 행 중에서 서로 동일한, 즉 중복된 행이 있는지 확인해야 하는 경우가 있습니다. 이럴 때는 행렬을 매개변수로 받는 함수를 하나 정의하고, map 메서드를 사용해 각 행을 튜플(tuple)로 변환한 뒤, 각 행의 등장 빈도를 계산하여 빈도가 1보다 큰 행만 콘솔에 출력하면 됩니다.
예제 코드
아래는 위 과정을 구현한 전체 예시입니다.
from collections import Counter
def find_dupes(my_matrix):
my_matrix = map(tuple, my_matrix)
freq_dict = Counter(my_matrix)
for (row, freq) in freq_dict.items():
if freq > 1:
print(row)
my_matrix = [[1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 1], [1, 0, 1, 1, 0, 0],
[1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 1], [0, 0, 1, 0, 0, 1]]
print("The matrix is :")
print(my_matrix)
print("The result is :")
find_dupes(my_matrix)
실행 결과
The matrix is : [[1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 1], [1, 0, 1, 1, 0, 0], [1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 1], [0, 0, 1, 0, 0, 1]] The result is : (1, 1, 0, 1, 0, 1) (0, 0, 1, 0, 0, 1)
코드 설명
필요한 패키지인
collections모듈의Counter클래스를 임포트합니다.행렬을 매개변수로 받는 'find_dupes'라는 이름의 함수를 정의합니다.
map메서드를 사용해 행렬의 각 행(리스트)을 튜플로 변환합니다. 리스트는 딕셔너리 키로 사용할 수 없지만, 튜플은 변경 불가능(immutable)하기 때문에 키로 활용할 수 있습니다.Counter를 사용해 행렬 내 모든 행의 등장 횟수를 계산합니다.계산된 결과는 '행: 빈도' 형태의 딕셔너리로 저장됩니다.
딕셔너리의 항목들을 하나씩 순회합니다.
특정 행의 빈도가 1보다 크다면, 즉 두 번 이상 등장하는 중복 행이라면 해당 행을 콘솔에 출력합니다.
함수 외부에서 행렬(엄밀히 말하면 리스트의 리스트)을 정의하고, 그 내용을 콘솔에 출력합니다.
정의된 행렬을 인자로 전달하여 함수를 호출합니다.
최종적으로 중복된 행들이 콘솔에 출력됩니다.