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

파이썬 – 리스트 안에서 하위 리스트(부분 리스트)의 빈도 계산하기

개요

주어진 리스트 안에서 특정 하위 리스트(서브리스트)가 몇 번 등장하는지 확인해야 하는 경우가 종종 있습니다. 파이썬에서는 리스트 컴프리헨션(list comprehension)len 함수, 그리고 if 조건문을 조합하면 별도의 라이브러리 없이 간단하게 해결할 수 있습니다.

예제 코드

아래는 주어진 리스트에서 하위 리스트가 나타나는 횟수를 세는 방법입니다.

my_list = [23, 33, 45, 67, 54 , 43, 33, 45, 67, 83, 33, 45, 67,90, 0]

print("The list is : " )
print(my_list)

sub_list = [33, 45, 67, 90]
print("The sub-list is : " )
print(sub_list)

my_result = len([sub_list for index in range(len(my_list)) if my_list[index : index + len(sub_list)] == sub_list])

print("The resultant list is : ")
print(my_result)

실행 결과

The list is :
[23, 33, 45, 67, 54, 43, 33, 45, 67, 83, 33, 45, 67, 90, 0]
The sub-list is :
[33, 45, 67, 90]
The resultant list is :
1

코드 설명

  • 정수로 구성된 리스트 my_list를 정의한 뒤 콘솔에 출력합니다.

  • 찾고자 하는 하위 리스트 sub_list를 정의하고 역시 콘솔에 출력합니다.

  • 리스트 컴프리헨션으로 전체 리스트를 순회하면서 각 인덱스마다 if 조건을 검사합니다.

  • 조건식 my_list[index : index + len(sub_list)] == sub_list는 현재 인덱스부터 하위 리스트 길이만큼 잘라낸 부분이 하위 리스트와 완전히 일치하는지 확인합니다.

  • 일치하는 경우 그 항목이 임시 리스트에 추가되고, 마지막에 len() 함수로 일치 횟수를 세어 결과 변수에 할당합니다.

  • 최종적으로 연속 패턴이 발견된 횟수인 1이 콘솔에 출력됩니다.

참고 사항

이 방법은 요소들이 연속으로 이어져 있는 경우만 카운트한다는 점에 유의하세요. 위 예제에서 [33, 45, 67] 조합은 두 번 등장하지만, 뒤에 90이 바로 이어지는 [33, 45, 67, 90] 패턴은 마지막 구간에서 단 한 번만 나타나므로 결과값이 1이 됩니다. 만약 리스트가 매우 크다면 슬라이싱 비교 대신 zip 기반의 슬라이딩 윈도우 방식을 사용하면 메모리를 더 효율적으로 아낄 수 있습니다.