컬렉션 모듈에서 Python의 카운터를 사용하는 방법

이 자습서에서는 Python의 컬렉션 모듈에서 카운터 개체를 사용하는 방법을 배웁니다.

Python에서 긴 시퀀스(예: Python 목록 또는 문자열)로 작업할 때 때때로 시퀀스에 나타나는 항목과 나타나는 횟수를 저장해야 할 수 있습니다.

Python 사전은 이러한 응용 프로그램에 적합한 내장 데이터 구조입니다. 그러나 collections 모듈에 있는 Python의 Counter 클래스는 카운터를 구성하여 이를 단순화할 수 있습니다. 카운터는 시퀀스에서 항목 및 개수의 사전입니다.

앞으로 몇 분 동안 다음 내용을 배우게 됩니다.

  • Python의 카운터 객체 사용
  • Iterable에 항목의 개수 값을 저장하는 Python 사전 만들기
  • 단순화된 구문으로 Python의 카운터를 사용하여 사전을 다시 작성합니다.
  • 요소 업데이트 및 빼기, 두 카운터 개체 간의 교차점 찾기와 같은 작업 수행
  • most_common() 메서드를 사용하여 카운터에서 가장 자주 사용되는 항목 가져오기

시작하자!

Python 컬렉션 모듈 및 카운터 클래스

항목과 항목 수를 iterable에 저장하기 위해 Python 사전을 자주 사용합니다. 항목과 개수는 각각 키와 값으로 저장됩니다.

Counter 클래스는 Python의 내장 컬렉션 모듈의 일부이므로 다음과 같이 Python 스크립트에서 가져올 수 있습니다.

from collections import Counter

언급한 대로 Counter 클래스를 가져온 후 다음과 같이 카운터 개체를 인스턴스화할 수 있습니다.

<counter_object> = Counter(iterable)

여기:

  • iterable은 Python 목록, 문자열 또는 튜플과 같은 유효한 Python iterable입니다.
  • iterable의 항목은 해시 가능해야 합니다.

이제 카운터를 사용하여 파이썬 이터러블에서 카운터 객체를 생성하는 방법을 알았으니 코딩을 시작하겠습니다.

이 자습서에서 사용된 예제는 이 GitHub 요점에서 찾을 수 있습니다.

Python Iterables에서 카운터 객체를 생성하는 방법

예를 들어 ‘renaissance’라는 Python 문자열을 만들고 단어라고 부르겠습니다.

>>> word = "renaissance"

우리의 목표는 단어 문자열의 각 문자가 문자열에서 나타나는 횟수에 매핑되는 사전을 만드는 것입니다. 한 가지 접근 방식은 다음과 같이 for 루프를 사용하는 것입니다.

>>> letter_count = {}
>>> for letter in word:
...     if letter not in letter_count:
...         letter_count[letter] = 0
...     letter_count[letter] += 1
...
>>> letter_count
{'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}

위의 코드 스니펫이 수행하는 작업을 구문 분석해 보겠습니다.

  • letter_count를 빈 Python 사전으로 초기화합니다.
  • 단어 문자열을 반복합니다.
  • letter_count 사전에 문자가 있는지 확인합니다.
  • 문자가 없으면 값을 0으로 추가한 다음 값을 1씩 증가시킵니다.
  • 단어에서 문자가 나타날 때마다 문자에 해당하는 값이 1씩 증가합니다.
  • 이것은 전체 문자열을 반복할 때까지 계속됩니다.
  CD 표지를 인쇄하는 방법

문자열 word를 반복하는 for 루프를 사용하여 자체적으로 letter_count 사전을 구성했습니다.

이제 collections 모듈의 Counter 클래스를 사용해 봅시다. iterables를 반복할 필요 없이 letter_count를 얻기 위해 Counter()에 단어 문자열을 전달하기만 하면 됩니다.

>>> from collections import Counter
>>> letter_count = Counter(word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})

카운터 개체는 Python 사전이기도 합니다. 내장 isinstance() 함수를 사용하여 이를 확인할 수 있습니다.

>>> isinstance(letter_count,dict)
True

보시다시피 isinstance(letter_count, dict)는 카운터 객체 letter_count가 Python dict 클래스의 인스턴스임을 나타내는 True를 반환합니다.

카운터 개체 수정

지금까지 Python 문자열에서 카운터 개체를 만드는 방법을 배웠습니다.

다른 iterable의 요소로 카운터 객체를 업데이트하거나 다른 iterable을 빼서 카운터 객체를 수정할 수도 있습니다.

다른 Iterable의 요소로 카운터 업데이트

다른 문자열 another_word를 초기화해 봅시다:

>>> another_word = "effervescence"

another_word 문자열의 항목으로 letter_count 카운터 개체를 업데이트하고 싶다고 가정합니다.

카운터 개체 letter_count에 대해 update() 메서드를 사용할 수 있습니다.

>>> letter_count.update(another_word)
>>> letter_count
Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})

출력에서 counter 개체가 another_word의 문자와 해당 항목 수를 포함하도록 업데이트되었음을 ​​알 수 있습니다.

다른 Iterable에서 요소 빼기

이제 letter_count 개체에서 another_word의 값을 뺍니다. 이를 위해 빼기() 메서드를 사용할 수 있습니다. .subtract()를 사용하면 에서 의 항목에 해당하는 값을 뺍니다.

letter_count에서 another_word를 빼자.

>>> letter_count.subtract(another_word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})

another_word의 문자에 해당하는 값이 차감되었지만 추가된 ‘f’ 및 ‘v’ 키는 제거되지 않은 것을 볼 수 있습니다. 이제 값이 0으로 매핑됩니다.

참고: 여기서는 Python 문자열인 another_word를 빼기() 메서드 호출에 전달했습니다. 파이썬 카운터 객체나 다른 이터러블을 전달할 수도 있습니다.

  iPhone에서 구독을 취소하는 방법

파이썬에서 두 카운터 객체 사이의 교차점

때때로 두 Python 카운터 객체 사이의 교차점을 찾아 둘 사이에 어떤 키가 공통인지 식별할 수 있습니다.

another_word 문자열 ‘effervescence’에서 counter 객체, 예를 들어 letter_count_2를 만들어 봅시다.

>>> another_word = "effervescence"
>>> letter_count_2 = Counter(another_word)
>>> letter_count_2
Counter({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})

간단한 & 연산자를 사용하여 letter_count와 letter_count_2 사이의 교차점을 찾을 수 있습니다.

>>> letter_count & letter_count_2
Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})

두 단어에 공통적인 키와 발생 횟수를 얻는 방법에 주목하십시오. ‘renaissance’와 ‘effervescence’ 모두 ‘e’가 두 번 등장하고 ‘r’, ‘n’, ‘s’, ‘c’가 각각 한 번씩 공통적으로 등장합니다.

most_common을 사용하여 가장 자주 사용되는 항목 찾기

Python 카운터 개체에 대한 또 다른 일반적인 작업은 가장 자주 발생하는 항목을 찾는 것입니다.

카운터에서 상위 k개의 가장 일반적인 항목을 가져오려면 카운터 개체에서 most_common() 메서드를 사용할 수 있습니다. 여기에서 우리는 letter_count에서 most_common()을 호출하여 가장 자주 발생하는 3개의 문자를 찾습니다.

>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]

‘renaissance’라는 단어에 ‘e’, ​​’n’, ‘a’라는 글자가 두 번 나오는 것을 볼 수 있습니다.

이는 카운터에 많은 항목이 포함되어 있고 가장 일반적인 키로 작업하는 데 관심이 있는 경우에 특히 유용합니다.

결론

다음은 자습서에서 배운 내용에 대한 간단한 검토입니다.

  • Python 내장 컬렉션 모듈의 Counter 클래스를 사용하여 모든 반복 가능 항목의 개수 값 사전을 가져올 수 있습니다. iterable의 모든 항목이 해시 가능한지 확인해야 합니다.
  • counter1.update(counter2) 구문과 함께 update() 메서드를 사용하여 다른 카운터 객체 또는 다른 이터러블의 콘텐츠로 하나의 Python 카운터 객체의 콘텐츠를 업데이트할 수 있습니다. counter2 대신 iterable을 사용할 수 있습니다.
  • 업데이트된 카운터에서 iterables 중 하나의 내용을 제거하려는 경우, counter1.subtract(counter2)와 같이 minus() 메서드를 사용할 수 있습니다.
  • 두 카운터 개체 간의 공통 요소를 찾으려면 & 연산자를 사용할 수 있습니다. 두 개의 카운터 counter1과 counter2가 주어지면 counter1과 counter2는 이 두 카운터 객체의 교집합을 반환합니다.
  • 카운터에서 k개의 가장 빈번한 항목을 얻으려면 most_common() 메서드를 사용할 수 있습니다. counter.most_common(k)은 k개의 가장 일반적인 항목과 해당 개수를 제공합니다.
  Google 스프레드시트에서 텍스트를 분할하는 방법

다음으로 collections 모듈의 또 다른 클래스인 default dict를 사용하는 방법을 알아봅니다. 일반 Python 사전 대신 기본 사전을 사용하여 누락된 키를 처리할 수 있습니다.