파이썬/자료구조

[파이썬][자료구조] Counter 설명, 예시, 문자열, 파일에서 알파벳 세기

메가구글 2023. 3. 23. 03:37

1. Counter 

Counterdict의 서브클래스로 파이썬에서 해싱가능한 개체를 세기 위해 설계됐다.

객체를 key로 개수를 value로 저장하는 딕셔너리이다.

Counter를 이용하기 위해서는 연속되거나, 반복 가능한 객체를 인자로 제공해야 한다.

 

 


2. Counter를 이용한 예시

from collections import Counter

#문자열을 인자로 사용
Counter("mississippi")

#리스트를 인자로 사용
Counter(list("mississippi"))

Output

Counter({'m': 1, 'i': 4, 's': 4, 'p': 2})

 

 


3. set()을 이용해 1로 초기화하기

파이썬의 set은 unique 객체를 저장한다. (중복되지 않는)

아래 예제에서는 중복되는 알파벳을 카운팅 하지 않는다. 

이를 이용해서 각 사용하는 알파벳을 1로 초기화 한다.

 

from collections import Counter

#1로 초기화 한다. 중복허용x
Counter(set("mississippi"))

Output

Counter({'m': 1, 'i': 1, 's': 1, 'p': 1})

 

 


4. update()을 이용해 기존 개수 유지하면서 추가하기

from collections import Counter

cnt = Counter("mississippi")
print (cnt)

cnt.update("misp")
print(cnt)

Output

Counter({'i': 4, 's': 4, 'p': 2, 'm': 1})
Counter({'i': 5, 's': 5, 'p': 3, 'm': 2})

 

 


5. most_common()을 이용한 가장 빈도수 높은 물품 찾기

이 메소드는 현재 카운팅 된 객체를 (object, count) 리스트의 형태로 반환한다.

most_common(n)을 하게 되면 큰 순서부터 n개의 (object, count)형태의 리스트를 반환한다.

from collections import Counter

sales = Counter(apple=5, banna=10, orange=15)
sales.most_common()

Output

[('orange', 15), ('banna', 10), ('apple', 5)]

 

슬라이싱도 가능하다.

from collections import Counter

sales = Counter(apple=5, banna=10, orange=15)
sales.most_common()[::-1]

Output

[('apple', 5), ('banna', 10), ('orange', 15)]

 


6. Counter를 이용한 텍스트 파일에서 알파벳 개수 세기

텍스트 파일은 the zen of python이라고 구글에 치면 찾을 수 있다.

아니면 import this을 사용하고 실행시켜 보면, 복사해서 텍스트 파일로 만들 수 있다.

최대로 많이 사용한 알파벳을 4개 출력하게 했다.

from collections import Counter

def count_letters(filename):
    letter_counter = Counter()
    with open(filename) as file:
        for line in file:
            line_letters = [
                char for char in line.lower() if char.isalpha()
            ]
            letter_counter.update(Counter(line_letters))
    return letter_counter.most_common(4)

count_letters("zenPython.txt")

Output

[('e', 88), ('t', 75), ('a', 53), ('i', 52)]

 

 


참고자료

https://realpython.com/python-counter/