리스트 내 특정 요소의 등장 횟수(빈도)를 제한해야 하는 상황이 종종 발생합니다. 이럴 때는 간단한 반복문과 append 메서드를 함께 활용하면 손쉽게 해결할 수 있습니다. 아래에서 그 구체적인 방법을 살펴보겠습니다.
예제 코드
다음은 리스트 내 각 요소의 빈도를 미리 정의된 최대값으로 제한하는 방법을 보여주는 예제입니다.
from collections import defaultdict
my_list = [11, 14, 15, 14, 11, 14, 14, 15, 15, 16]
print("The list is :")
print(my_list)
my_dict = {14 : 3, 11 : 1, 16 : 1, 15 : 2}
print("The dictionary is :")
print(my_dict)
my_result = []
my_def_dict = defaultdict(int)
for element in my_list:
my_def_dict[element] += 1
if my_def_dict[element] > my_dict[element]:
continue
else:
my_result.append(element)
print("The result is :")
print(my_result)
실행 결과
The list is :
[11, 14, 15, 14, 11, 14, 14, 15, 15, 16]
The restrict dictionary is :
{14: 3, 11: 1, 16: 1, 15: 2}
The result is :
[11, 14, 15, 14, 14, 15, 16]
코드 설명
collections모듈의defaultdict클래스를 환경에 임포트합니다.정수로 구성된 리스트를 정의한 뒤 콘솔에 출력합니다.
각 요소별 허용 가능한 최대 등장 횟수를 담은 딕셔너리를 정의하고 출력합니다.
결과를 저장할 빈 리스트를 생성합니다.
요소 개수를 자동으로 카운트하기 위해 정수형
defaultdict를 선언합니다.원본 리스트를 순회하면서 각 요소가 나타날 때마다 딕셔너리의 카운트 값을 1씩 증가시킵니다.
현재까지의 등장 횟수가 허용된 최대 빈도를 초과하면
continue문을 사용해 해당 요소를 건너뜁니다.그렇지 않은 경우에는
append메서드를 통해 해당 요소를 결과 리스트에 추가합니다.최종적으로 필터링된 결과가 콘솔에 출력됩니다.
위 예제에서 확인할 수 있듯이, 원본 리스트 [11, 14, 15, 14, 11, 14, 14, 15, 15, 16]에서 14는 최대 3번, 11과 16은 각각 1번, 15는 2번까지만 유지되며, 그 결과 [11, 14, 15, 14, 14, 15, 16]이 반환됩니다. 이처럼 defaultdict를 활용하면 요소별 출현 횟수를 추적하면서 조건에 맞는 새로운 리스트를 효율적으로 만들 수 있습니다.