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ä.