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]
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ı:
list.append()– sona tek bir öğe ekler.list.extend()– bir yinelenebilir nesnedeki her öğeyi sona ekler.list.insert()– belirli bir konuma ekler.list.remove()– bir değerin ilk geçtiği yeri siler.list.pop()– bir öğeyi kaldırır ve döndürür (varsayılan olarak sonuncuyu).list.clear()– her öğeyi kaldırır.list.sort()– yerinde sıralar. Azalan sıra içinreverse=Truegeçin.list.reverse()– yerinde tersine çevirir.
>>> 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.
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.