collections — kokoelma- ja säiliötyypit

Tämä moduuli tarjoaa erikoistuneita säiliötietotyyppejä, jotka täydentävät sisäänrakennettuja tyyppejä list, tuple, dict ja set: kaksipäisen jonon (deque), nimettyjen kenttien monikkojen tehdasfunktion (namedtuple()) sekä järjestyksen säilyttävän sanakirjan (OrderedDict).

Luokat

class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)

Deque-tietorakenteet (kaksipäiset jonot) ovat listan kaltaisia säiliöitä, jotka tukevat O(1)-aikaisia lisäyksiä ja poistoja jonon kummasta tahansa päästä. Uudet deque-objektit luodaan seuraavilla argumenteilla:

  • iterable on iteroitava, jolla deque täytetään sitä luotaessa. Se voi olla tyhjä monikko tai lista, jolloin syntyy alussa tyhjä deque.

  • maxlen on määritettävä, ja deque rajoitetaan tähän enimmäispituuteen. Kun deque on täynnä, jokainen uusi lisätty alkio poistaa alkion vastakkaisesta päästä.

  • Valinnainen flags voi olla 1, jolloin alkioita lisättäessä tarkistetaan ylivuoto.

Deque-objektit tukevat tyyppiä bool, funktiota len(), iterointia sekä alaindeksin lukua ja kirjoitusta. Niillä on myös seuraavat metodit:

append(x: Any) None

Lisää x deque-jonon oikeaan päähän. Nostaa poikkeuksen IndexError, jos ylivuototarkistus on käytössä eikä jonossa ole enää tilaa.

appendleft(x: Any) None

Lisää x deque-jonon vasempaan päähän. Nostaa poikkeuksen IndexError, jos ylivuototarkistus on käytössä eikä jonossa ole enää tilaa.

pop() Any

Poistaa ja palauttaa alkion deque-jonon oikeasta päästä. Nostaa poikkeuksen IndexError, jos alkioita ei ole.

popleft() Any

Poistaa ja palauttaa alkion deque-jonon vasemmasta päästä. Nostaa poikkeuksen IndexError, jos alkioita ei ole.

extend(iterable: Iterable) None

Laajentaa deque-jonoa lisäämällä kaikki iterable-objektin alkiot jonon oikeaan päähän. Nostaa poikkeuksen IndexError, jos ylivuototarkistus on käytössä eikä jonossa ole enää tilaa.

collections.namedtuple(name: str, fields: str | Sequence[str]) type

Tämä on tehdasfunktio, joka luo uuden namedtuple-tyypin tietyllä nimellä ja kenttäjoukolla. Namedtuple on monikon aliluokka, jonka kenttiin pääsee käsiksi paitsi numeerisella indeksillä myös attribuuttisyntaksilla symbolisia kenttänimiä käyttäen. Fields on merkkijonosekvenssi, joka määrittää kenttänimet. Yhteensopivuuden vuoksi CPythonin kanssa se voi olla myös merkkijono, jossa kenttänimet on eroteltu välilyönnein (mutta tämä on tehottomampaa). Käyttöesimerkki:

from collections import namedtuple

MyTuple = namedtuple("MyTuple", ("id", "name"))
t1 = MyTuple(1, "foo")
t2 = MyTuple(2, "bar")
print(t1.name)
assert t2.name == t2[1]

Ilmentymät tarjoavat myös seuraavan metodin:

collections._asdict() OrderedDict

Palauttaa kenttänimet ja niiden arvot OrderedDict-objektina.

class collections.OrderedDict(*args: Any, **kwargs: Any)

dict-tyypin aliluokka, joka muistaa ja säilyttää avainten lisäysjärjestyksen. Hyväksyy samat konstruktorimuodot kuin dict (iteroitavan (key, value)-parien joukon, toisen kuvauksen tai avainsana-argumentteja). Kun järjestettyä sanakirjaa iteroidaan, avaimet/alkiot palautetaan siinä järjestyksessä, jossa ne lisättiin:

from collections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)

Tuloste:

z 1
a 2
w 5
b 3
popitem() Tuple

Poistaa ja palauttaa (avain, arvo) -parin sanakirjasta. Parit palautetaan LIFO-järjestyksessä.

Ero CPythoniin

OrderedDict.popitem() ei tue argumenttia last=False ja poistaa sekä palauttaa aina viimeisen alkion, jos sellainen on.

Tämän kiertämiseksi voit käyttää muotoa pop(<first_key>) poistaaksesi ensimmäisen alkion:

first_key = next(iter(d))
d.pop(first_key)