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

Python – 리스트에서 특정 요소가 최소 N번 이상 등장하는지 확인하는 방법

리스트 데이터 분석에서 빈도 확인이 중요한 이유

리스트를 활용한 데이터 분석 과정에서는 특정 요소가 주어진 리스트에 최소 N번 이상 존재하는지 확인해야 하는 경우가 자주 발생합니다. 예를 들어 숫자 5가 리스트 안에 세 번 이상 등장했는지 판별하는 상황을 생각해 볼 수 있습니다. 이번 글에서는 이러한 조건을 검사하는 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.

방법 1: 반복문으로 등장 횟수 직접 세기

가장 기본적인 접근 방식은 리스트를 순회하면서 목표 요소와 일치하는 항목의 개수를 직접 세는 것입니다. 일치하는 항목을 만날 때마다 카운트를 1씩 증가시키고, 카운트가 요구 횟수 N에 도달하면 반복을 조기에 종료해 불필요한 연산을 줄일 수 있습니다. 최종적으로 카운트가 N 이상이면 True, 그렇지 않으면 False를 결과로 출력합니다.

예제

listA = [1, 3, 5, 5, 4, 5]

# 주어진 리스트 출력
print('주어진 리스트:', listA)

# 확인할 요소
elem = 5
# 필요한 최소 등장 횟수
N = 3

count = 0
for e in listA:
    if e == elem:
        count += 1
        if count >= N:
            break

# 결과 판정 및 출력
res = count >= N
print('요소 %d가 최소 %d번 이상 등장하는가?' % (elem, N), res)

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

출력

주어진 리스트: [1, 3, 5, 5, 4, 5]
요소 5가 최소 3번 이상 등장하는가? True

방법 2: itertools의 islice와 next 활용하기

두 번째 방법은 itertools 모듈의 islice와 next 함수를 활용하는 좀 더 파이썬다운 접근입니다. 먼저 원본 리스트를 순회하며 목표 요소가 발견될 때마다 True를 새로운 리스트에 추가합니다. 이후 islice로 해당 리스트의 N번째 요소(인덱스 N-1)부터 슬라이싱하고, next로 값을 꺼냅니다. True가 N개 이상 존재하면 N번째 True가 반환되고, 그렇지 않으면 next의 기본값인 False가 반환됩니다.

예제

from itertools import islice

listA = [2, 11, 9, 2, 4, 2]

# 주어진 리스트 출력
print('주어진 리스트:', listA)

# 확인할 요소
elem = 2
# 필요한 최소 등장 횟수
N = 3

# 목표 요소가 발견될 때마다 True를 저장할 리스트
elem_list = []
for i in listA:
    if i == elem:
        elem_list.append(True)

# N번째 True(인덱스 N-1)가 있는지 확인, 없으면 기본값 False 반환
res = next(islice(elem_list, N - 1, None), False)

# 결과 출력
print('요소 %d가 최소 %d번 이상 등장하는가?' % (elem, N), res)

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

출력

주어진 리스트: [2, 11, 9, 2, 4, 2]
요소 2가 최소 3번 이상 등장하는가? True

마무리 및 참고 사항

두 방법 모두 리스트를 한 번만 순회하므로 시간 복잡도는 O(n)으로 동일합니다. 반복문 방식은 처리 과정이 명확하게 드러나 초보자에게 이해하기 쉽고, islice 방식은 코드가 간결해 이터레이터를 적극적으로 활용하고 싶을 때 유용합니다. 참고로 조건이 단순하다면 내장 메서드를 사용해 listA.count(elem) >= N처럼 한 줄로 처리할 수도 있지만, 이 방식은 조기 종료 없이 리스트 전체를 탐색하므로 데이터가 매우 클 때는 위의 두 방법이 더 효율적일 수 있습니다.