Python 3/Listan, monikon tai joukon purkaminen muuttujiin
Kuten funktion argumentit voidaa myös lista, monikko tai joukko purkaa (unpack) muuttujiin.
>>> l = [8, 2, 35]
>>> eka, toka, kolkki = l
>>> eka
8
>>> toka
2
>>> kolkki
35
Kuitenkin, jos alkioita eri määrä, kuin muuttujia joihin ne puretaan aiheutuu ValueError.
>>> eka, toka, kolkki = [8, 2, 35, 11]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)
Operaattorilla * voidaa osoittaa kaikki ylimääräiset arvot keräävä muuttuja.
>>> eka, toka, *loput = [8, 2, 35, 11]
>>> eka
8
>>> toka
2
>>> loput
[35, 11]
*-merkityn muuttujan ei tarvitse olla viimeinen, vaan sitä voi käyttää minkä muuttujan kohdalla tahansa.
>>> eka, *muut, vika = [8, 2, 35, 11]
>>> eka
8
>>> muut
[2, 35]
>>> vika
11
>>> *muut, tokavika, vika = [8, 2, 35, 11]
>>> muut
[8, 2]
>>> tokavika
35
>>> vika
11
Jos arvoja on vähemmän, tulee kokoavaan muuttujaan tyhjä lista. Arvoja pitää kuitenkin aina olla vähintään yhtä monta kuin *-merktsemättömiä muuttujia on.
>>> eka, toka, *loput = [8, 2]
>>> loput
[]
Monikoiden ja joukkojen alkiot voidaa purkaa vastaavasti. Huomaa, että myös näissä tapauksissa arvot kootaan listaan.
>>> eka, *muut, vika = (8, 2, 35, 11)
>>> muut
[2, 35]
>>> eka, *muut, vika = {8, 2, 35, 11}
>>> muut
[35, 2]
Joukon tapauksessa alkioiden järjestys saattaa muuttua, koska joukon alkioilla ei ole järjestystä.
Menetelmä on hyödyllinen, kun funktio palauttaa monta arvoa.
>>> osamäärä, jakojäännös = divmod(11, 3)
>>> osamäärä
3
>>> jakojäännös
2
sekä silmoukoissa, kun kaikki alkiot ovat vakiokokoisia
>>> maalintekijät = [ (1, 'Molander', '13.56'), (12, 'Jykä', '55.01'), (10, 'Vatanescu', '89.30') ]
>>> for numero, nimi, aika in maalintekijät:
... print(f'Ajassa {aika}, {nimi} ({numero})')
...
Ajassa 13.56, Molander (1)
Ajassa 55.01, Jykä (12)
Ajassa 89.30, Vatanescu (10)
Alaviivaa (_) on tapana käyttää muuttujan nimenä, kun emme ole kiinnostuneita sen sisällöstä, vaan muuttujan arvo asetetaan sivuvaikutuksena monta arvoa paluttavasta funktiosta.
>>> (X_train, _), (_, _) = mnist.load_data()
Sekvenssin purkaminen toiseen sekvenssin
muokkaaSekvenssi voidaan myös purkaa toisen sekvenssin sisälle *-operaatorilla.
>>> aloituskentällinen = [ 3, 12, 15, 20, 48, 86, 99 ]
>>> vaihtopelaajat = [ 4, 22, 45 ]
>>> [ *aloituskentällinen, *vaihtopelaajat ]
[3, 12, 15, 20, 48, 86, 99, 4, 22, 45]
Sanakirjan voi purkaa toiseen **-operaattorilla.
>>> pelaaja = { 'nimi': 'Jykä', 'numero': 12, 'pelipaikka': 'libero' }
>>> { **pelaaja, 'asia': 'nilkan nyrjähdys', 'hinta': '299,90' }
{'nimi': 'Jykä', 'numero': 12, 'pelipaikka': 'libero', 'asia': 'nilkan nyrjähdys', 'hinta': '299,90'}
Johdanto: | |
---|---|
Tietotyypit ja tietorakenteet: |
Luvut - Merkkijonot - Lista - Monikko (tuple) - Sanakirja - Joukko (set) |
Ohjausrakenteet | |
Muut kielen rakenteet: |
Moduuli - Luokka - Funktio - Virheidenhallinta - Tiedosto |
Graafinen käyttöliittymä: | |
Harjoitustehtäviä: | |
Lisätiedot ja lähteet: |