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, funktiotalen(), 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 kuindict(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 argumenttialast=Falseja 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)