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

Python 2차원 리스트에서 가장 많이 등장하는 요소 찾기


2차원 리스트(2D List)는 리스트를 요소로 가지는, 즉 '리스트 안의 리스트' 형태의 자료구조입니다. 이 글에서는 이렇게 중첩된 여러 하위 리스트 속에서 가장 자주 등장하는 요소(최빈값)를 찾는 세 가지 방법을 살펴봅니다.

1. max 함수와 count 함수 활용

리스트 컴프리헨션(list comprehension)으로 2차원 리스트를 1차원으로 평탄화한 뒤, max 함수의 key 인자에 count 함수를 지정하여 등장 횟수가 가장 많은 요소를 반환합니다. 별도의 모듈 임포트 없이 가장 간단하게 구현할 수 있는 방법입니다.

예제 코드

def highest_freq(lst):
    SimpleList = [el for sublist in lst for el in sublist]
    return max(SimpleList, key=SimpleList.count)

# 주어진 리스트
listA = [[45, 20, 11], [20, 17, 45], [20, 13, 9]]
print("Given List:\n", listA)
print("Element with highest frequency:\n", highest_freq(listA))

실행 결과

Given List:
[[45, 20, 11], [20, 17, 45], [20, 13, 9]]
Element with highest frequency:
20

2. itertools.chain 활용

앞선 방법과 접근 방식은 동일하지만, 리스트 평탄화에 itertools 모듈의 chain.from_iterable 함수를 사용합니다. 반복문 기반 컴프리헨션보다 코드가 간결해지며, 대용량 데이터를 처리할 때 성능상 이점이 있습니다.

예제 코드

from itertools import chain

def highest_freq(lst):
    SimpleList = list(chain.from_iterable(lst))
    return max(SimpleList, key=SimpleList.count)

# 주어진 리스트
listA = [[45, 20, 11], [20, 17, 45], [20, 13, 9]]
print("Given List:\n", listA)
print("Element with highest frequency:\n", highest_freq(listA))

실행 결과

Given List:
[[45, 20, 11], [20, 17, 45], [20, 13, 9]]
Element with highest frequency:
20

3. Counter와 chain 조합

collections 모듈의 Counter 클래스와 itertools의 chain 함수를 함께 사용하는 방법입니다. chain으로 모든 요소를 꺼내면 Counter가 각 요소의 개수를 자동으로 계산하고, most_common(1) 메서드를 통해 가장 빈도가 높은 요소를 손쉽게 얻을 수 있습니다.

예제 코드

from itertools import chain
from collections import Counter

def highest_freq(lst):
    SimpleList = chain.from_iterable(lst)
    return Counter(SimpleList).most_common(1)[0][0]

# 주어진 리스트
listA = [[45, 20, 11], [20, 17, 45], [20, 13, 9]]
print("Given List:\n", listA)
print("Element with highest frequency:\n", highest_freq(listA))

실행 결과

Given List:
[[45, 20, 11], [20, 17, 45], [20, 13, 9]]
Element with highest frequency:
20

마무리

세 가지 방법 모두 동일한 결과인 20을 반환합니다. 임포트 없이 바로 쓸 수 있는 첫 번째 방법은 간단한 작업에 적합하고, 데이터 양이 많다면 chain 기반 방식이, 단순 최빈값 조회를 넘어 빈도 분석까지 해야 한다면 Counter 방식이 가장 유용합니다. 상황에 맞는 방법을 선택해 활용하시기 바랍니다.