Python 카운터 – Python 컬렉션 카운터

Python Counter 클래스는 Collections 모듈의 일부입니다. Counter는 사전의 하위 클래스이며 요소와 그 수를 추적하는 데 사용됩니다.

Python Counter

Counter는 요소가 Dict 키로 저장되고 해당 수가 사전 값으로 저장되는 순서 없는 컬렉션입니다. Counter 요소의 수는 양수, 제로 또는 음수 정수일 수 있습니다. 그러나 키와 값에 대한 제한은 없습니다. 값은 숫자 여야 할 것으로 의도되어 있지만 다른 객체도 저장할 수 있습니다.

Python Counter 객체 생성

빈 Counter를 생성하거나 일부 초기 값을 사용하여 시작할 수 있습니다.

from collections import Counter

# 빈 Counter
counter = Counter()
print(counter)  # Counter()

# 초기 값을 가진 Counter
counter = Counter(['a', 'a', 'b'])
print(counter)  # Counter({'a': 2, 'b': 1})

counter = Counter(a=2, b=3, c=1)
print(counter)  # Counter({'b': 3, 'a': 2, 'c': 1})

Counter 객체를 생성하기 위해 인수로서 모든 반복 가능한 객체를 사용할 수도 있습니다. 따라서 문자열 리터럴리스트도 Counter 객체를 생성하는 데 사용할 수 있습니다.

# Counter의 인수로 반복 가능한 것
counter = Counter('abc')
print(counter)  # Counter({'a': 1, 'b': 1, 'c': 1})

# List를 Counter의 인수로
words_list = ['Cat', 'Dog', 'Horse', 'Dog']
counter = Counter(words_list)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

# Dictionary를 Counter의 인수로
word_count_dict = {'Dog': 2, 'Cat': 1, 'Horse': 1}
counter = Counter(word_count_dict)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

위에서 언급한 대로, 우리는 카운터 클래스의 목적을 저해할 수 있지만, 숫자가 아닌 데이터를 카운트 값으로 사용할 수도 있습니다.

# Counter는 숫자가 아닌 것들과도 작동합니다
special_counter = Counter(name='Pankaj', age=20)
print(special_counter)  # Counter({'name': 'Pankaj', 'age': 20})

Python Counter 메소드

이제 Counter 클래스의 메소드와 그것에 수행할 수 있는 일부 다른 작업을 살펴 보겠습니다.

요소 개수 얻기

# 개수 얻기
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
countDog = counter['Dog']
print(countDog)  # 2

존재하지 않는 키의 개수를 얻으려고하면 0을 반환하고 KeyError을 발생시키지 않습니다.

# 존재하지 않는 키의 개수 얻기, KeyError를 발생시키지 않음
print(counter['Unicorn'])  # 0

요소 개수 설정

카운터의 기존 요소의 개수도 설정할 수 있습니다. 요소가 존재하지 않으면 카운터에 추가됩니다.

counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# 개수 설정
counter['Horse'] = 0
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

# 개수 설정 for non-existing key, adds to Counter
counter['Unicorn'] = 1
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Unicorn': 1, 'Horse': 0})

Counter에서 요소 삭제하기

del을 사용하여 카운터 객체에서 요소를 삭제할 수 있습니다.

# 카운터에서 요소 삭제
del counter['Unicorn']
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

elements()

이 메서드는 카운터의 요소 목록을 반환합니다. 양수 카운트를 가진 요소만 반환됩니다.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# elements()
elements = counter.elements()  # doesn't return elements with count 0 or less
for value in elements:
    print(value)

위의 코드는 “Dog”가 2번 나타납니다. 다른 요소는 양수 카운트가 없으므로 무시됩니다. 카운터는 정렬되지 않은 컬렉션이므로 요소가 특정한 순서로 반환되지 않습니다.

most_common(n)

이 메서드는 카운터에서 가장 일반적인 요소를 반환합니다. ‘n’ 값을 제공하지 않으면 정렬된 사전이 가장 일반적인 요소부터 가장 일반적이지 않은 요소까지 반환됩니다. 이 정렬된 사전에서 가장 일반적이지 않은 요소를 얻기 위해 슬라이싱을 사용할 수 있습니다.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# most_common()
most_common_element = counter.most_common(1)
print(most_common_element)  # [('Dog', 2)]

least_common_element = counter.most_common()[:-2:-1]
print(least_common_element)  # [('Cat', -1)]

subtract() 및 update()

Counter subtract() 메서드는 다른 카운터에서 요소 개수를 빼는 데 사용됩니다. update() 메서드는 다른 카운터에서 개수를 추가하는 데 사용됩니다.

counter = Counter('ababab')
print(counter)  # Counter({'a': 3, 'b': 3})
c = Counter('abc')
print(c)  # Counter({'a': 1, 'b': 1, 'c': 1})

# subtract
counter.subtract(c)
print(counter)  # Counter({'a': 2, 'b': 2, 'c': -1})

# update
counter.update(c)
print(counter)  # Counter({'a': 3, 'b': 3, 'c': 0})

Python 카운터 산술 연산

우리는 숫자처럼 카운터에 대해 일부 산술 연산을 수행할 수 있습니다. 그러나 이러한 연산은 양수 개수를 가진 요소만 반환됩니다.

# 산술 연산
c1 = Counter(a=2, b=0, c=-1)
c2 = Counter(a=1, b=-1, c=2)

c = c1 + c2  # return items having +ve count only
print(c)  # Counter({'a': 3, 'c': 1})

c = c1 - c2  # keeps only +ve count elements
print(c)  # Counter({'a': 1, 'b': 1})

c = c1 & c2  # intersection min(c1[x], c2[x])
print(c)  # Counter({'a': 1})

c = c1 | c2  # union max(c1[x], c2[x])
print(c)  # Counter({'a': 2, 'c': 2})

Python 카운터의 기타 연산

카운터 개체에 대해 수행할 수 있는 기타 연산에 대한 코드 스니펫 몇 가지를 살펴보겠습니다.

counter = Counter({'a': 3, 'b': 3, 'c': 0})
# 기타 예시
print(sum(counter.values()))  # 6

print(list(counter))  # ['a', 'b', 'c']
print(set(counter))  # {'a', 'b', 'c'}
print(dict(counter))  # {'a': 3, 'b': 3, 'c': 0}
print(counter.items())  # dict_items([('a', 3), ('b', 3), ('c', 0)])

# 0 또는 음수 개수 요소 제거
counter = Counter(a=2, b=3, c=-1, d=0)
counter = +counter
print(counter)  # Counter({'b': 3, 'a': 2})

# 모든 요소 지우기
counter.clear()
print(counter)  # Counter()

이것으로 Python 카운터 클래스에 대한 설명이 끝났습니다.

전체 예제 코드를 내 GitHub 저장소에서 다운로드할 수 있습니다.

참조: 파이썬 문서

Source:
https://www.digitalocean.com/community/tutorials/python-counter-python-collections-counter