2.7. Liste¶
Lista je promjenjiv, uređen niz vrijednosti. Za razliku od nizova i bajtova, liste mogu sadržavati vrijednosti bilo kojeg tipa, a stavke možete mijenjati, dodavati ili uklanjati na mjestu.
2.7.1. Stvaranje listi¶
Uglate zagrade stvaraju literal liste:
empty = []
nums = [1, 2, 3]
mixed = [1, "two", 3.0, True, None] # any types
nested = [[1, 2], [3, 4], [5, 6]] # lists of lists
Konstruktor list gradi listu iz bilo kojeg iterabilnog objekta:
>>> list("abc")
['a', 'b', 'c']
>>> list(range(5))
[0, 1, 2, 3, 4]
2.7.2. Duljina, indeksiranje i izrezivanje¶
len() vraća broj stavki. Indeksiranje i izrezivanje rade jednako kao kod nizova – pozicije počinju od 0, negativni indeksi broje se od kraja, a izrezak izvan valjanog raspona tiho se odsijeca umjesto da izazove iznimku:
>>> nums = [10, 20, 30, 40, 50]
>>> len(nums)
5
>>> nums[0]
10
>>> nums[-1]
50
>>> nums[1:4]
[20, 30, 40]
Pozitivni indeksi broje se od početka; negativni indeksi broje se od kraja.¶
Sintaksa izrezivanja kratica je za objekt slice koji Python gradi u pozadini. nums[1:4] isto je što i nums[slice(1, 4)]. Rijetko ćete ga ručno stvarati, no slice() ponekad je koristan za pohranjivanje izreska kao vrijednosti za ponovnu uporabu:
head = slice(0, 3)
print(nums[head]) # [10, 20, 30]
print(letters[head]) # first three letters, same slice
2.7.3. Mijenjanje liste¶
Liste podržavaju indeksirano i izrezano pridruživanje na mjestu:
>>> 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]
Najčešće metode liste:
list.append()– dodaje jednu stavku na kraj.list.extend()– dodaje svaku stavku iz iterabilnog objekta.list.insert()– umeće na zadanu poziciju.list.remove()– briše prvo pojavljivanje vrijednosti.list.pop()– uklanja i vraća stavku (zadano zadnju).list.clear()– uklanja svaku stavku.list.sort()– sortira na mjestu. Proslijeditereverse=Trueza silazni redoslijed.list.reverse()– obrće redoslijed na mjestu.
>>> 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]
Te metode mijenjaju listu na mjestu i vraćaju None. Pisanje
nums = nums.sort() # nums is now None -- common bug
gotovo nikad nije ono što želite; izvorni nums je sortiran, ali pridruživanje zatim prepisuje ime povratnom vrijednošću. Ili pozovite nums.sort() u zasebnom retku, ili koristite ugrađenu funkciju sorted() da dobijete novu sortiranu listu bez mijenjanja izvornika.
2.7.4. Operatori¶
+spaja dvije liste u novu listu.*ponavlja listu.inprovjerava pripadnost.
>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> [0] * 5
[0, 0, 0, 0, 0]
>>> 3 in [1, 2, 3]
True
2.7.5. Iteriranje po listi¶
Petlja for prolazi kroz stavke redom:
for n in [10, 20, 30]:
print(n)
2.7.6. Aliasi i mijenjanje¶
Lista je jedna vrijednost u memoriji; više imena može pokazivati na istu listu. Mijenjanje kroz jedno ime vidljivo je kroz svako drugo ime koje pokazuje na istu listu.
a i b obje pokazuju na istu listu. Mijenjanje kroz bilo koje ime mijenja ono što vidi svako drugo ime.¶
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> b
[1, 2, 3, 4] # same object, change is visible
Da biste napravili neovisnu kopiju, izrežite cijelu listu ili pozovite konstruktor list:
>>> c = a[:] # or list(a)
>>> a.append(5)
>>> c
[1, 2, 3, 4] # c is unaffected
Time se kopira samo lista najviše razine; ugniježđene liste i dalje su dijeljene između izvornika i kopije.