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]
Lista, jossa on kuusi solua, positiiviset indeksit 0..5 yläpuolella ja negatiiviset indeksit -6..-1 kunkin solun alapuolella.

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:

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

  • in testaa 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.

Kaksi muuttujaa a ja b, jotka molemmat osoittavat samaan lista- olioon; a:han lisääminen näkyy b:n 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ä.