2.7. Listeler

Bir liste, değiştirilebilir, sıralı bir değerler dizisidir. Dizelerin ve baytların aksine listeler herhangi bir türden değer tutabilir ve öğeleri yerinde değiştireb, ekleyebilir veya kaldırabilirsiniz.

2.7.1. Liste oluşturma

Köşeli parantezler bir liste değişmezi oluşturur:

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 yapıcısı, herhangi bir yinelenebilir nesneden bir liste oluşturur:

>>> list("abc")
['a', 'b', 'c']
>>> list(range(5))
[0, 1, 2, 3, 4]

2.7.2. Uzunluk, indeksleme ve dilimleme

len(), öğelerin sayısını döndürür. İndeksleme ve dilimleme, dizelerle aynı şekilde çalışır – konumlar 0’dan başlar, negatif indeksler sondan sayar ve geçerli aralığın dışındaki bir dilim hata vermek yerine sessizce kırpılır:

>>> nums = [10, 20, 30, 40, 50]
>>> len(nums)
5
>>> nums[0]
10
>>> nums[-1]
50
>>> nums[1:4]
[20, 30, 40]
Altı hücreli bir liste; her hücrenin üstünde 0..5 pozitif indeksleri, altında -6..-1 negatif indeksleri yer alır.

Pozitif indeksler baştan sayar; negatif indeksler sondan sayar.

Dilim sözdizimi, Python’ın arka planda oluşturduğu bir slice nesnesinin kısaltmasıdır. nums[1:4], nums[slice(1, 4)] ile aynıdır. Bir dilimi elle nadiren oluşturursunuz, ancak slice() zaman zaman bir dilimi yeniden kullanmak üzere bir değer olarak saklamak için yararlıdır:

head = slice(0, 3)
print(nums[head])             # [10, 20, 30]
print(letters[head])          # first three letters, same slice

2.7.3. Bir listeyi değiştirme

Listeler yerinde indekslenmiş ve dilimlenmiş atamayı destekler:

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

En yaygın liste metotları:

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

Bu metotlar listeyi yerinde değiştirir ve None döndürür. Şunu yazmak

nums = nums.sort()    # nums is now None -- common bug

neredeyse hiçbir zaman istediğiniz şey değildir; orijinal nums sıralanmıştır, ancak atama ardından adın üzerine dönüş değeriyle yazar. Ya nums.sort() çağrısını kendi satırında yapın ya da orijinali değiştirmeden yeni bir sıralanmış liste geri almak için yerleşik sorted() kullanın.

2.7.4. Operatörler

  • +, iki listeyi yeni bir listeye birleştirir.

  • *, bir listeyi tekrarlar.

  • in, üyeliği sınar.

>>> [1, 2] + [3, 4]
[1, 2, 3, 4]
>>> [0] * 5
[0, 0, 0, 0, 0]
>>> 3 in [1, 2, 3]
True

2.7.5. Bir liste üzerinde yineleme

Bir for döngüsü öğeleri sırayla dolaşır:

for n in [10, 20, 30]:
    print(n)

2.7.6. Takma adlar ve değişiklik

Bir liste, bellekteki tek bir değerdir; birkaç ad aynı listeyi gösterebilir. Bir ad üzerinden değişiklik yapmak, aynı listeyi gösteren diğer her addan görülebilir.

Her ikisi de aynı liste nesnesini gösteren a ve b değişkenleri; a'ya ekleme yapmak b üzerinden görülebilir.

a ve b her ikisi de aynı listeyi gösterir. Herhangi bir ad üzerinden değişiklik yapmak, diğer her adın gördüğünü değiştirir.

>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> b
[1, 2, 3, 4]                # same object, change is visible

Bağımsız bir kopya oluşturmak için listenin tamamını dilimleyin veya list yapıcısını çağırın:

>>> c = a[:]                # or list(a)
>>> a.append(5)
>>> c
[1, 2, 3, 4]                # c is unaffected

Bu yalnızca en üst düzey listeyi kopyalar; iç içe listeler hâlâ orijinal ile kopya arasında paylaşılır.