Як використовувати лічильник Python із модуля колекцій

| | 0 Comments| 11:19 AM
Categories:

У цьому підручнику ви дізнаєтесь, як використовувати об’єкт лічильника з модуля колекції Python.

Коли ви працюєте з довгими послідовностями в Python, скажімо, зі списками або рядками Python, іноді вам може знадобитися зберегти елементи, які з’являються в послідовності, і кількість разів, коли вони з’являються.

Словник Python є відповідною вбудованою структурою даних для таких програм. Однак клас лічильника Python із модуля колекцій може спростити це, побудувавши лічильник, який є словником елементів та їхньої кількості в послідовності.

Протягом наступних кількох хвилин ви дізнаєтесь про таке:

  • Використовуйте об’єкт лічильника Python
  • Створіть словник Python для зберігання значень підрахунку елементів у ітерації
  • Перепишіть словник за допомогою лічильника Python із спрощеним синтаксисом
  • Виконуйте такі операції, як оновлення та віднімання елементів, пошук перетину між двома зустрічними об’єктами
  • Отримайте найбільш часті елементи в лічильнику за допомогою методу most_common().

Давайте розпочнемо!

Модуль колекцій Python і клас лічильника

Ви часто використовуєте словник Python, щоб зберігати елементи та їхню кількість у ітерації. Елементи та кількість зберігаються як ключі та значення відповідно.

Оскільки клас Counter є частиною вбудованого модуля колекцій Python, ви можете імпортувати його у свій сценарій Python так:

from collections import Counter

Після імпортування класу Counter, як зазначено, ви можете створити екземпляр об’єкта лічильника, як показано:

<counter_object> = Counter(iterable)

Тут:

  • iterable — це будь-який дійсний ітерований Python, наприклад список, рядок або кортеж Python.
  • Елементи в iterable мають бути хешованими.

Тепер, коли ми знаємо, як використовувати Counter для створення об’єктів лічильника з будь-якого ітерованого Python, давайте почнемо кодувати.

  7 додатків для подружжя зловмисників, які варто перевірити зараз

Приклади, використані в цьому посібнику, можна знайти в цій суті 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 із модуля collections. Нам потрібно лише передати рядок слова в 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.

Зміна об’єкта лічильника

Поки що ми навчилися створювати об’єкти-лічильники з рядків Python.

Ви також можете змінювати об’єкти лічильників, оновлюючи їх елементами з іншого ітерованого елемента або віднімаючи з них інший ітерований об’єкт.

  Spotify продовжує призупинятися [Best Fixes]

Оновлення лічильника з елементами з іншого ітерованого

Давайте ініціалізуємо інший рядок 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 або інший ітерований об’єкт.

Перетин між двома об’єктами-лічильниками в Python

Іноді вам може знадобитися знайти перетин між двома об’єктами лічильника Python, щоб визначити, які ключі є спільними між ними.

Давайте створимо об’єкт-лічильник, скажімо, letter_count_2, із рядка another_word «шипіння».

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

  Як дивитися TNT без кабелю

Знайдіть найпоширеніші елементи за допомогою 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 для обробки відсутніх ключів.