collections модулу
Күнүмдүк саноону, топтоштурууну жана кезектер менен иштөөнү жеңил кылган атайын контейнерлер
dict жана list дээрлик баарын аткарат, бирок стандарттык collections модулунан үч атайын контейнер сиз болбосо күн сайын кол менен жаза турган шаблон кодду жоёт. Counter нерселерди санайт, defaultdict жок ачкычтар үчүн маанини автоматтык түрдө коёт, ал эми deque эки четинен туруктуу убакытта кошот жана өчүрөт. Алардын бири да экзотикалык эмес; ар бири — сиз мурунтан билген жөнөкөй маалымат структурасы, анда тажатма бөлүктөр сиз үчүн жасалып бүткөн.
Counterменен нерселерди санап, эң көп кездешкендерин окуу,defaultdictмененKeyErrorжок топтоштуруу жана маанилерди топтоо,dequeменен ылдам кезектерди жана стектерди куруу,deque.popleft()эмне үчүнlist.pop(0)дан жакшы экенин түшүндүрүү,- тапшырмага туура контейнерди тандоо.
1. Эмне үчүн жөнөкөй dict жана list дан чыгуу керек?
Сиз мурунтан эле сөздүктөрдү жана тизмелерди ишенимдүү түзөсүз. Бирок кээ бир үлгүлөр кайра-кайра кайталанат: ар бир маанинин канча жолу кездешкенин саноо, нерселерди кайсы бир касиет боюнча топторго чогултуу же тизмени башынан элемент өчүрүлүүчү кезек катары колдонуу. Алардын ар бири таза Python да таза чечимге ээ жана ар биринин тажатма майда-чүйдөсү бар.
Кол менен саноо ачкычты көбөйтүүдөн мурун анын бар экенин текшерүүнү билдирет:
counts = {}
for word in words:
if word not in counts:
counts[word] = 0
counts[word] += 1
Кол менен топтоштуруу да ошондой формага ээ — ачкычты биринчи жолу көргөндө бош тизмени түзүшүңүз керек. Ал эми жөнөкөй тизмени кезек катары колдонуу байкалбай жай: list.pop(0) ар бир калган элементти бир орунга солго жылдырат, ошондуктан n элементтүү тизменин башынан өчүрүү ар жолу O(n) турат.
collections модулу так ушул майда-чүйдөлөрдү жоюучу үч контейнерди берет. Сиз аларды бир жолу импорттойсуз жана шаблон код жоголот:
from collections import Counter, defaultdict, deque