2.7. Listat¶
Lista on muuttuva, järjestetty arvojen jono. Toisin kuin merkkijonot ja tavut, listat voivat sisältää minkä tahansa tyyppisiä arvoja, ja voit muuttaa, lisätä tai poistaa alkioita paikan päällä.
2.7.1. Listojen luominen¶
Hakasulkeet luovat listaliteraalin:
empty = []
nums = [1, 2, 3]
mixed = [1, "two", 3.0, True, None] # any types
nested = [[1, 2], [3, 4], [5, 6]] # lists of lists
list -konstruktori rakentaa listan mistä tahansa iteroitavasta:
>>> list("abc")
['a', 'b', 'c']
>>> list(range(5))
[0, 1, 2, 3, 4]
2.7.2. Pituus, indeksointi ja viipalointi¶
len() palauttaa alkioiden määrän. Indeksointi ja viipalointi toimivat samalla tavalla kuin merkkijonoilla – sijainnit alkavat nollasta, negatiiviset indeksit lasketaan lopusta, ja kelvollisen alueen ulkopuolinen viipale leikkautuu hiljaa sen sijaan, että se nostaisi poikkeuksen:
>>> nums = [10, 20, 30, 40, 50]
>>> len(nums)
5
>>> nums[0]
10
>>> nums[-1]
50
>>> nums[1:4]
[20, 30, 40]
Positiiviset indeksit lasketaan alusta; negatiiviset indeksit lasketaan lopusta.¶
Viipalointisyntaksi on lyhennysmerkintä slice -oliolle, jonka Python rakentaa kulissien takana. nums[1:4] on sama kuin nums[slice(1, 4)]. Sellaista rakennetaan harvoin käsin, mutta slice() on toisinaan hyödyllinen viipaleen tallentamiseksi arvona uudelleenkäyttöä varten:
head = slice(0, 3)
print(nums[head]) # [10, 20, 30]
print(letters[head]) # first three letters, same slice
2.7.3. Listan muokkaaminen¶
Listat tukevat indeksoitua ja viipaloitua sijoitusta paikan päällä:
>>> nums = [10, 20, 30]
>>> nums[0] = 99
>>> nums
[99, 20, 30]
>>> nums[1:3] = [200, 300, 400] # slice can change the length
>>> nums
[99, 200, 300, 400]
Yleisimmät listametodit:
list.append()– lisää yhden alkion loppuun.list.extend()– lisää loppuun jokaisen iteroitavan alkion.list.insert()– lisää annettuun sijaintiin.list.remove()– poistaa arvon ensimmäisen esiintymän.list.pop()– poistaa ja palauttaa alkion (oletuksena viimeisen).list.clear()– poistaa jokaisen alkion.list.sort()– järjestää paikan päällä. Annareverse=Truelaskevaa järjestystä varten.list.reverse()– kääntää järjestyksen paikan päällä.
>>> nums = []
>>> nums.append(1)
>>> nums.extend([2, 3])
>>> nums.insert(0, 99)
>>> nums
[99, 1, 2, 3]
>>> nums.pop()
3
>>> nums.sort()
>>> nums
[1, 2, 99]
Nämä metodit muokkaavat listaa paikan päällä ja palauttavat None. Kirjoittaminen
nums = nums.sort() # nums is now None -- common bug
ei lähes koskaan ole se, mitä haluat; alkuperäinen nums on järjestetty, mutta sijoitus korvaa sitten nimen paluuarvolla. Kutsu joko nums.sort() omalla rivillään tai käytä sisäänrakennettua sorted() saadaksesi uuden järjestetyn listan muuttamatta alkuperäistä.
2.7.4. Operaattorit¶
+yhdistää kaksi listaa uudeksi listaksi.*toistaa listan.intestaa kuuluvuutta.
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> [0] * 5
[0, 0, 0, 0, 0]
>>> 3 in [1, 2, 3]
True
2.7.5. Listan iterointi¶
for -silmukka käy alkiot läpi järjestyksessä:
for n in [10, 20, 30]:
print(n)
2.7.6. Aliasointi ja muokkaus¶
Lista on yksittäinen arvo muistissa; useat nimet voivat osoittaa samaan listaan. Muokkaus yhden nimen kautta näkyy jokaisen muun samaan listaan osoittavan nimen kautta.
a ja b osoittavat molemmat samaan listaan. Muokkaus kumman tahansa nimen kautta muuttaa sitä, mitä jokainen muu nimi näkee.¶
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> b
[1, 2, 3, 4] # same object, change is visible
Tehdäksesi itsenäisen kopion viipaloi koko lista tai kutsu list -konstruktoria:
>>> c = a[:] # or list(a)
>>> a.append(5)
>>> c
[1, 2, 3, 4] # c is unaffected
Tämä kopioi vain ylimmän tason listan; sisäkkäiset listat jaetaan edelleen alkuperäisen ja kopion välillä.