Како користити Питхон-ов бројач из модула Цоллецтионс

У овом водичу ћете научити како да користите објекат бројача из Питхоновог модула за прикупљање.

Када радите са дугим секвенцама у Питхон-у, рецимо, Питхон листама или стринговима, можда ћете понекад морати да сачувате ставке које се појављују у низу и колико пута се појављују.

Питхон речник је погодна уграђена структура података за такве апликације. Међутим, Питхонова класа Цоунтер из модула цоллецтионс може ово да поједностави – конструисањем бројача – који је речник ставки и њиховог броја у низу.

У наредних неколико минута научићете следеће:

  • Користите Питхон-ов цоунтер објекат
  • Направите Питхон речник за чување вредности броја ставки у итерабле
  • Препишите речник користећи Питхон бројач са поједностављеном синтаксом
  • Извршите операције као што су ажурирање и одузимање елемената, проналажење пресека између два објекта бројача
  • Узмите најчешће ставке у бројачу помоћу методе мост_цоммон().

Хајде да почнемо!

Питхон Цоллецтионс Модуле и Цоунтер Цласс

Често ћете користити Питхон речник за складиштење ставки и њиховог броја у итерабле. Ставке и број се чувају као кључеви и вредности, респективно.

Пошто је класа Цоунтер део уграђеног модула за колекције Питхон-а, можете је увести у своју Питхон скрипту на следећи начин:

from collections import Counter

Након увоза класе Цоунтер као што је поменуто, можете инстанцирати објекат бројача као што је приказано:

<counter_object> = Counter(iterable)

овде:

  • итерабле је било који важећи Питхон итерабле као што је Питхон листа, стринг или тупле.
  • Ставке у итерабле треба да се хеширају.
  14 Често постављана питања и одговори на Јава интервјуу [2022]

Сада када знамо како да користимо Цоунтер да креирамо цоунтер објекте из било ког Питхон итерабле-а, почнимо са кодирањем.

Примери коришћени у овом водичу могу се наћи у овом ГитХуб-у.

Како направити објекат бројача из Питхон Итераблес

Хајде да направимо Питхон стринг, рецимо, ‘ренесанса’ и назовемо га речју.

>>> word = "renaissance"

Наш циљ је да направимо речник где се свако слово у низу речи пресликава на број пута које се појављује у низу. Један приступ је да користите фор петље као што је приказано:

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

Хајде да анализирамо шта ради горњи исечак кода:

  • Иницијализује број_слова у празан Питхон речник.
  • Петља кроз низ речи.
  • Проверава да ли је писмо присутно у речнику леттер_цоунт.
  • Ако слово није присутно, додаје га са вредношћу 0 и затим повећава вредност за 1.
  • За свако појављивање слова у речи, вредност одговарајућег слова повећава се за 1.
  • Ово се наставља све док не прођемо кроз цео низ.

Направили смо речник леттер_цоунт — сами — користећи петљу фор за петљу кроз реч низа.

Сада користимо класу Цоунтер из модула цоллецтионс. Потребно је само да проследимо стринг речи у Цоунтер() да бисмо добили леттер_цоунт без потребе за петљом кроз итерабле.

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

Објекат бројача је такође Питхон речник. Можемо да користимо уграђену функцију исинстанце() да ово проверимо:

>>> isinstance(letter_count,dict)
True

Као што се види, исинстанце(леттер_цоунт, дицт) враћа Труе означавајући да је објекат бројача леттер_цоунт инстанца класе Питхон дицт.

  Како да ажурирате своје Аппле АирПодс

Измена објекта Цоунтер

До сада смо научили да креирамо објекте бројача од Питхон стрингова.

Такође можете модификовати објекте бројача тако што ћете их ажурирати елементима из другог итерабле или одузимањем другог итерабле од њих.

Ажурирање бројача са елементима из другог итерабле-а

Хајде да иницијализујемо још један стринг анотхер_ворд:

>>> another_word = "effervescence"

Претпоставимо да желимо да ажурирамо објекат бројача леттер_цоунт са ставкама из низа анотхер_ворд.

Можемо да користимо метод упдате() на објекту бројача леттер_цоунт.

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

У излазу видимо да је објекат бројача ажуриран тако да укључује и слова и њихов број појављивања из друге_речи.

Одузимање елемената од другог итерабле

Сада одузмимо вредност анотхер_ворд од леттер_цоунт објекта. Да бисмо то урадили, можемо користити методу субтрацт(). Коришћењем <цоунтер-објецт>.субтрацт(<соме-итерабле>) одузима се вредности које одговарају ставкама у <соме-итерабле> од <цоунтер-објецт>.

Одузмимо другу_реч од броја_слова.

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

Видимо да су вредности које одговарају словима у другој_речи одузете, али додати кључеви ‘ф’ и ‘в’ нису уклоњени. Сада се мапирају на вредност од 0.

Напомена: Овде смо проследили отхер_ворд, Питхон стринг, позиву методе субтрацт(). Такође можемо проследити Питхон објекат бројача или други итерабле.

Пресек између два Цоунтер објекта у Питхон-у

Можда ћете понекад желети да пронађете пресек између два Питхон објекта бројача да бисте идентификовали који су кључеви заједнички између њих.

Хајде да направимо објекат бројача, рецимо, леттер_цоунт_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})

Можемо користити једноставан & оператор да пронађемо пресек између броја_слова и броја_слова_2.

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

Обратите пажњу на то како добијате кључеве и број појављивања заједничких за две речи. И ‘ренесанса’ и ‘ефервесценција’ садрже два појављивања ‘е’ и по једно појављивање ‘р’, ‘н’, ‘с’ и ‘ц’ заједничко.

  КЛЕД вс. ОЛЕД вс. ЛЕД: Шта да купите?

Пронађите најчешће ставке користећи мост_цоммон

Још једна уобичајена операција на Питхон објекту бројача је проналажење ставки које се најчешће појављују.

Да бисте добили првих к најчешћих ставки у бројачу, можете користити метод мост_цоммон() на објекту бројача. Овде позивамо мост_цоммон() на леттер_цоунт да бисмо пронашли три слова која се најчешће појављују.

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

Видимо да се слова ‘е’, ‘н’ и ‘а’ два пута појављују у речи ‘ренесанса’.

Ово је посебно корисно ако бројач садржи велики број уноса и ако сте заинтересовани за рад са најчешћим кључевима.

Закључак

Ево кратког прегледа онога што смо научили у туторијалу:

  • Класа Цоунтер из Питхон-овог уграђеног модула колекција може се користити за добијање речника вредности бројања свих ставки у било ком итеративном елементу. Требало би да се уверите да се све ставке у итерабле могу хеширати.
  • Можете ажурирати садржај једног Питхон објекта бројача садржајем из другог објекта бројача или било ког другог итерабле користећи упдате() методу са синтаксом: цоунтер1.упдате(цоунтер2). Имајте на уму да можете користити било који итерабле уместо бројача2.
  • Ако желите да уклоните садржај једног од итераблеа из ажурираног бројача, можете користити метод субтрацт(): цоунтер1.субтрацт(цоунтер2).
  • Да бисте пронашли заједничке елементе између два објекта бројача, можете користити & оператор. За два бројача цоунтер1 и цоунтер2, цоунтер1 & цоунтер2 враћају пресек ова два објекта бројача.
  • Да бисте добили к најчешћих ставки у бројачу, можете користити метод мост_цоммон(). цоунтер.мост_цоммон(к) даје к најчешћих ставки и одговарајући број.

Затим научите како да користите подразумевани дицт, другу класу у модулу колекције. Можете користити подразумевани дицт уместо обичног Питхон речника за руковање кључевима који недостају.