List
- Elimizdeki verileri gruplamak bir yapı altında tutmak isteyebiliriz.
- Mesela bir sınıftaki öğrencilerin notlarını tutmak istiyorum. 5 farklı öğrenci var, şimdiye kadar öğrendiklerimizle şöyle yapabilirdim:
ogrenci_1 = 78
ogrenci_2 = 80
ogrenci_3 = 43
ogrenci_4 = 65
ogrenci_5 = 90
- Bunların hepsi bir sınıftaki notları ifade ediyor. Bunları bir veri tipi olarak bir arada tutsak daha mantıklı olmaz mı?
listveri tipi de tam burada devreye giriyor. Birden çok veriyi gruplayıp bir arada tutmak istediğimizde kullanabileceğimiz bir yapıdır.
listler belirtirken köşeli parantezle belirtiyoruz:[element1, element2,...].
listler içsel yapı içerdikleri içinnon-scalarveri tipidir.
- Elemanları arasına virgül koyarak farklı eleman belirtmeye başladığımı ifade ediyorum.
notlar = [78, 80, 43, 65, 90]
# bunun aynısını şu şekilde de tutabilirdik:
notlar = [ogrenci_1, ogrenci_2, ogrenci_3, ogrenci_4, ogrenci_5]
- Bu oluşturduğumuz yapının ilk elemanı ilk öğrencinin notu, ikinci elemanı ikinci öğrencinin notunu belirtiyor (bu mantık böyle devam ediyor). Böylece öğrencilerin notlarını farklı 5 değişkende tutmak yerine bir veri tipi altında düzenli tutabilmiş olduk.
- Nasıl ki stringlerde elemanlarına indexleme yaparak [0] gibi değerlerle ulaşabiliyorsak, listlerde de aynı durum söz konusu.
notlarlistesinin ilk elemanına ulaşmak için:
# ogrenci_1 in notu
notlar[0]
list'lerin içine istediğimiz veri tipini koyabiliriz. listeleri sadece verilerimi içine koyduğumuz bir kutu olarak düşünün, listlerin tek yaptığı şey bunları bir arada tutmak. Elemanları istediğim veri objesi olabilir. int, float, string, hatta listler bile!
["a","b"]
[True, False]
[[1,2], [3,4,5]]
Listler Farklı Veri Tiplerini İçerebilir
- Aynı list'in içine farklı tipte veri tipleri koyabiliriz.
l = [1, 2, "a", "b", True, 4.5, [1,2,3]]
l
Indexing ve Slicing
- String konusunda yaptığımız indexleme mantığı ve slicing mantığı tamamen listler için de geçerli.
notlar
notlar[0]
notlar[-1]
notlar[10]
notlar[-1]
notlar[1:]
notlar[1:3]
notlar[:200]
notlar[:3000]
Listlerin Elemanları Değiştirilebilir
- Listler
mutableveri tipleridir. Elemanlarını güncelleyebiliriz.
notlar
- Diyelim ki ikinci öğrencinin notunu eksik okuduk. 5 puan yükseltmek istiyoruz:
notlar[1] += 5 # notlar[1] = notlar[1] + 5
notlar
- Birden çok elemanı da değiştirebiliriz.
l = [1, 2, 3, 4]
l[0:3]
l[0:3] = 30, 40, 60
l
- Eşit sayıda vermemiz de gerekmez, l[0:3] olacak yere sadece solda yazdığımız yazılır.
l[0:3] = 30, 40
l
l = [1, 2, 3, 4]
l[0:3] = 30
- Slicing'in sonucuna tek bir değer yazacaksak bile direkt tek olarak veremeyiz,
iterableolması gerekir. Bunun ayrıntısını ileride göreceğiz şimdilik sol tarafı list olarak verebileceğimizi bilmeniz yeterli.
l[0:3] = [30]
l
len()
- Bize list'te kaç eleman olduğunu verir.
l
len(l)
Listin Sonuna Eleman Eklemek
append()
- İçine yazılan elemanı listenin sonuna ekler.
l = [1,2,3]
l.append(200)
l
extend()
- İçine yazılan birden çok elemanı listenin sonuna ekler.
l = [1,2,3]
l.extend([100,200,300])
l
Spesifik Bir Indexe Eleman Eklemek
- Belki list'in sonuna değil, spesifik bir indexine eleman eklemek istiyoruz. Bunu inser() ile yapabiliriz.
l = [1, 2, 3, 4, 5]
l[0] = 100
l
l = [1, 2, 3, 4, 5]
l.insert(0, 100) # is not l[0] = 100
- eğer l[0] = 100 yazmış olsaydık, liste 100,2,3,4,5 e dönerdi, ama ben 1->100 dönüşümü yapmak istemiyorum, ilk indexe 100'ü eklemek istiyorum. l.insert(0,100) tam da istediğimi yapıyor. 0. indexe 100 değerini yazıyor ve
1değerini sağa kaydırıyor, listeden silmemiş oluyor.
l
l.insert(3,44)
l
remove()
- Belirli bir elemanı listeden silmemize yarar. Eğer yazılan eleman listede yoksa error verir.
l = [1,2,3,4]
l.remove(40)
Bunu try-except ile çözebiliriz ama daha o konuyu görmedik. Yine de aşağıya kodu ekliyorum.
try:
l.remove(40)
except ValueError:
pass
- remove() sadece ilk gördüğü değeri siler. l.remove(40) dersem ve listede 1'den çok 40 varsa ilk gördüğünü siler.
l = [1,2,3,40,30,40]
l.remove(40)
l
pop()
- listenin belirli indexindeki elemanı silmeye ve o değeri döndürmeye yarar.
- remove() sadece siliyordu, pop() aynı zamanda o değeri döndürüyor.
l = [1,2,3,4,5,6]
# It deletes and return the value, remove() just removes it
l.pop(1)
l
l = [1,2,3,4,5,6]
l.pop(1) + 4
l
# out of range error
l.pop(100)
count()
count()'un içine yazdığımız değerin listede kaç defa göründüğünü döndürür.
l = [1, 2, 44, 4, 5, 1]
l.count(1)
l.count(44)
l.count(1000)
Aliasing
- Evet. Geldik olayların ilginç bir hal aldığı yere.
- Listeler bilgisayarın hafızasında integer, float gibi veri tiplerinin tutulduğundan biraz daha farklı tutuluyor.
- a = 2 dediğimiz zaman hafızada
aadında bir kutucuk oluşturuluyor demiştik.
a = 2
adirekt o kutunun adı oluyor.
- Ama listelerde durum böyle değil. l = [1,2,3] gibi bir liste yarattığımızda,
lkutunun adı değil, kutuyu işaret eden etiketin adı oluyor.
l = [1,2,3]
- Bu farkın getirdiği bazı yan etkiler var.
- Mesela kutunun adı direkt değişken adı olduğunda ve aşağıdaki işlemi yaptığımızda:
a = 2
b = a
b
a = a + 1
a
b
ayı güncellesek debgüncellenmiyor.bsadeceakutusunun değerine eşit olmuş oldu, kutunun kendisine değil.
- Aynısını listlerde yaptığımızda:
l = [1,2,3]
l2 = l
l
l2
l[0] = 200
l
l2
- l2 de güncellendi!
- Çünkü
l2 = ldediğimizde l2, l etiketinin değerine eşit oldu, iki etikette aynı kutuyu, veri objesini gösteriyor, o yüzden listeyi güncellemem ikisine de yansıyor.
- Git aynı değerle başka bir kutucuk yarat ve oraya etiket ol diyerek güncellenmemesini sağlayabilirim.
- Bunu
copy()ile yapacağız.
l2 = l.copy()
l
l2
l[0] = 300
l
l2
Listlerde Concatenation
+operatörü listlerde concatenation yapar.
l = [1,2,3]
l2 = [4,5,6]
l
l2
l + l2
l
l2
l3 = l + l2
l3
Belirli Bir Elemanın Indexini Bulmak
l = [1, 2, 3, 4, 3, 5, 6]
l
# İlk hangi indexte görünüyorsa onun değerini döndürür.
l.index(3)
l.index(4)
# listede olmayan değerler için error verir.
l.index(100)
List'i Tersine Çevirmek
l = [1,2,3,4]
l.reverse() # inplace: yani l'yi günceller.
l
l = [1,2,3,4]
- Aynısını slicing mantığı ile de yapabilirdik.
l[::-1]
l
l3 = l[::-1]
l3
l
- Orijinalini güncellemiyor, güncellemesi için variable assignment yapmamız lazım.
l = l[::-1]
l
List'in Elemanlarını Sıralamak (sorting)
- sorted() orijinal listeyi güncellemez.
- sorted() ve .sort() a bakacağız. İkisi de default olarak küçükten büyüğe sıralar. Sayısal verilerde sayısal değerine göre, stringlerde alfabetik sıraya göre sıralar.
l = ["b","a","c"]
sorted(l)
['a', 'b', 'c']
l
['b', 'a', 'c']
l3 = sorted(l)
l3
['a', 'b', 'c']
.sort()günceller
l = ["b","a","c"]
l.sort() # inplace
l
['a', 'b', 'c']
l = [1,2,10,3,-1]
sorted(l)
[-1, 1, 2, 3, 10]
l
[1, 2, 10, 3, -1]
# küçükten büyüğe sıralar l.sort()
l
[-1, 1, 2, 3, 10]
l = ["b","a","c","1","3","4"]
l.sort()
l
['1', '3', '4', 'a', 'b', 'c']
l = [1,3.1,2,0.6]
l.sort()
l
[0.6, 1, 2, 3.1]
l = ["b","a","c",1,2]
l.sort()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-152-fb07ac7c73ab> in <module>
----> 1 l.sort()
TypeError: '<' not supported between instances of 'int' and 'str'
l = ["b","a","c","1","3.5","4","5.6", "0.6"]
l.sort()
l
['0.6', '1', '3.5', '4', '5.6', 'a', 'b', 'c']
l = [[1,-20,3], [2,-200,-3]]
l.sort()
l
[[1, -20, 3], [2, -200, -3]]
l = [[10,-20,-3], [2,-2,3]]
l.sort()
l
[[2, -2, 3], [10, -20, -3]]
l = [[10,-20,-3], [10,-25,3]]
l.sort()
l
[[10, -25, 3], [10, -20, -3]]
l = [["a", "b", "c"], [2,-200,-3]]
l.sort()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-169-fb07ac7c73ab> in <module>
----> 1 l.sort()
TypeError: '<' not supported between instances of 'int' and 'str'
l
[['a', 'b', 'c'], [2, -200, -3]]
l = [[200, "b", "c"], [2,-200,-3,10]]
l.sort()
l
[[2, -200, -3, 10], [200, 'b', 'c']]
l = [[200, "b", "c"], [200,-200,-3,10]]
l.sort()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-175-fb07ac7c73ab> in <module>
----> 1 l.sort()
TypeError: '<' not supported between instances of 'int' and 'str'
Quiz
Answer the questions to check your understanding.
This lesson includes a short quiz.
Lesson discussion
Swap insights and ask questions about Python Temel
Be the first to start the discussion
Ask a question or share your thoughts about this lesson.