Как да използвате брояча на Python от модула за колекции

В този урок ще научите как да използвате обекта брояч от модула за събиране на Python.

Когато работите с дълги последователности в Python, да речем, списъци или низове на Python, понякога може да се наложи да съхранявате елементите, които се появяват в последователността, и броя пъти, в които се появяват.

Речникът на Python е подходяща вградена структура от данни за такива приложения. Въпреки това, класът Counter на Python от модула за колекции може да опрости това – чрез конструиране на брояч – който е речник на елементите и техния брой в последователността.

През следващите няколко минути ще научите следното:

  • Използвайте обекта за брояч на Python
  • Създайте речник на Python, за да съхранявате стойностите на броя на елементите в итерируем
  • Пренапишете речника, като използвате брояча на Python с опростен синтаксис
  • Извършвайте операции като актуализиране и изваждане на елементи, намиране на пресечна точка между два контра обекта
  • Вземете най-честите елементи в брояча, като използвате метода most_common().

Да започваме!

Модул за колекции на Python и клас брояч

Често ще използвате речник на Python, за да съхранявате елементите и техния брой в итерируем. Елементите и броят се съхраняват съответно като ключове и стойности.

Тъй като класът Counter е част от вградения модул за колекции на Python, можете да го импортирате във вашия скрипт на Python така:

from collections import Counter

След като импортирате класа Counter, както е споменато, можете да създадете обект на брояч, както е показано:

<counter_object> = Counter(iterable)

Тук:

  • итерируем е всеки валиден итерируем на Python като списък на Python, низ или кортеж.
  • Елементите в итерируемия трябва да могат да се хешират.
  Как да изтриете вашия Gmail адрес за постоянно

Сега, след като знаем как да използваме Counter, за да създаваме обекти за брояч от всеки итерируем на Python, нека започнем да кодираме.

Примерите, използвани в този урок, могат да бъдат намерени в тази същност на GitHub.

Как да създадете обект на брояч от Python Iterables

Нека създадем низ на 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.
  • Това продължава, докато преминем през целия низ.

Конструирахме речника letter_count — сами — използвайки for цикъл, за да преминем през низовата дума.

Сега нека използваме класа Counter от модула за колекции. Трябва само да предадем низа на думата на Counter(), за да получим letter_count, без да се налага да преминаваме през итерируеми елементи.

>>> 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) връща True, което показва, че обектът на брояча letter_count е екземпляр на класа dict на Python.

  Sanity се връща: Как новите лога на USB4 ще опростят пазаруването

Модифициране на обекта на брояча

Досега се научихме да създаваме контра обекти от низове на Python.

Можете също така да модифицирате обекти на броячи, като ги актуализирате с елементи от друг итерируем обект или изваждате друг итерируем от тях.

Актуализиране на брояч с елементи от друг итерируем

Нека инициализираме друг низ another_word:

>>> another_word = "effervescence"

Да предположим, че бихме искали да актуализираме обекта брояч letter_count с елементите от низа another_word.

Можем да използваме метода update() на обекта брояч letter_count.

>>> 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})

В изхода виждаме, че обектът на брояча е актуализиран, за да включва също буквите и техния брой срещания от another_word.

Изваждане на елементи от друг итерируем

Сега нека извадим стойността на another_word от обект letter_count. За да направим това, можем да използваме метода subtract(). Използването на .subtract() изважда стойностите, съответстващи на елементи в от .

Нека извадим another_word от letter_count.

>>> 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.

Забележка: Тук сме предали another_word, низ на Python, към извикването на метода subtract(). Можем също така да предадем Python counter обект или друг итерируем.

Пресечна точка между два контра обекта в Python

Понякога може да поискате да намерите пресечната точка между два броячи на Python, за да идентифицирате кои ключове са общи между двата.

Нека създадем обект-брояч, да речем, letter_count_2, от низа another_word ‘effervescence’.

>>> 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})

Забележете как получавате ключовете и броя на срещанията, общи за двете думи. И „ренесанс“, и „ефервесценция“ съдържат две срещания на „e“ и по едно срещане на „r“, „n“, „s“ и „c“ общо.

  Как да редактирате PDF файлове на Chromebook безплатно

Намерете най-често срещаните елементи, като използвате most_common

Друга обичайна операция върху обекта на брояча на Python е намирането на най-често срещаните елементи.

За да получите първите k най-често срещани елемента в брояча, можете да използвате метода most_common() на обекта брояч. Тук извикваме most_common() на letter_count, за да намерим трите най-често срещани букви.

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

Виждаме, че буквите „е“, „н“ и „а“ се срещат два пъти в думата „ренесанс“.

Това е особено полезно, ако броячът съдържа голям брой записи и се интересувате от работа с най-често срещаните ключове.

Заключение

Ето кратък преглед на това, което научихме в урока:

  • Класът Counter от вградения модул за колекции на Python може да се използва за получаване на речник на стойностите на броя на всички елементи във всеки итерируем. Трябва да се уверите, че всички елементи в итерируемия са хешируеми.
  • Можете да актуализирате съдържанието на един обект на брояч на Python със съдържание от друг обект на брояч или всеки друг итерируем, като използвате метода update() със синтаксиса: counter1.update(counter2). Имайте предвид, че можете да използвате всеки итерируем вместо counter2.
  • Ако искате да премахнете съдържанието на една от итерируемите от актуализирания брояч, можете да използвате метода subtract(): counter1.subtract(counter2).
  • За да намерите общите елементи между два броячи, можете да използвате оператора &. Дадени са два брояча counter1 и counter2, counter1 & counter2 връща пресечната точка на тези два обекта брояч.
  • За да получите k най-чести елемента в брояча, можете да използвате метода most_common(). counter.most_common(k) дава k най-често срещаните елемента и съответния брой.

След това научете как да използвате dict по подразбиране, друг клас в модула за колекции. Можете да използвате dict по подразбиране вместо обикновен речник на Python за обработка на липсващи ключове.