Python da Listeler
Pythonda listelerde veri elemanları saklandığı gibi veri öğeleri de saklanabilmektedir.
Diğer programlama dillerindede diziler vardır bunlar python listelerine benzer fakat aynı değildir!
Diziler sabit boyuttadır ve öğelerinin her birinde aynı veri türüne sahiptir.
Python’da listeler büyüyebilir ve küçülebilir.
Python’da bir listenin öğeleri farklı türleri saklayabilir. Diğer pekçok dilde bu mümkün değildir
Python’da listeler çeşitli biçimlerde yaratılabilirler en çok kullanılan yöntem köşeli parantez operatörünü kullanmaktır.
liste elemanları aralarına “,” atomu yerleştirilerek oluşturulur. Örneğin:
prime_list = [2,3,5,7] print(type(prime_list))
Resimde görüldüğü gibi listenin ilk elemanı 0. indisten başlıyor
prime_list[0] -> 2 değerini gösteriyor (dikkat değeri burada tutmuyor gösteriyor)
prime_list = [2,3,5,7] print(prime_list[0]) print(prime_list[1]) print(prime_list[2]) print(prime_list[3])
2
3
5
7
>>>
python‘da her şey nesnedir biz liste oluştururken kullandığımız 2, 3, 5, 7 değerleri aslında her biri farklı bir nesne biz prime_list[0] da o nesnenin adresini tutmuş oluyoruz.
resim ile ifade edelim
Görseli biraz kod ile açıklayalım
>>> w = 2 >>> x = 3 >>> y = 5 >>> z = 7 >>> print(' w ptr:',id(w),'\n','x ptr:',id(x),'\n','y ptr:',id(y),'\n','z ptr:',id(z),'\n') w ptr: 140718203589696 x ptr: 140718203589728 y ptr: 140718203589792 z ptr: 140718203589856
şimdi prime_list listesini oluşturalım
>>> prime_list = [2, 3, 5, 7]
şimdi de prime_list listesinin öğelerinin pointer’larına bakalım
>>> print(id(prime_list[0]),id(prime_list[1]),id(prime_list[2]),id(prime_list[3])) 140718203589696 140718203589728 140718203589792 140718203589856
140718203589696 adresi hem w değişkeni için hemde prime_list[0] için aynı
python burada hafızadan tasaruf etmek için w = 2 ifadesinin karşılığı olarak 2 değerine sahip bir nesne oluşturup o nesnenin adresini w değişkeninde tutuyor daha sonra yeniden bu değeri kullanan bir nesne oluştumak istendiğinde yeniden hafızada bu değeri tutmayıp istenen yere o değerin adresini verir taki o nesneyi gösteren herhangi bir referans kalmayana dek
daha detaylı bilgi için https://rushter.com/blog/python-garbage-collector/
python’ da liste elemanları farklı türden yani hetorojen olabilir.
örneğin:
my_list = [1, 'ahmet', 17.55, (3,5), [1, 3, 5, 7, 9]]
listenin ilk elamanının gösterdiği yer bir int nesnesi iken ikinci elamanının gösterdiği nesne bir string str nesnesini göstermektedir
bir listenin eleman sayısı python da built-in gelen len fonksiyonu ile elde edilebilir.
len(my_list) 5
listenin elemanlarını köşeli parantez operatörü ile erişebiliriz listenin ilk elemanı 0’ıncı indekstedir
köşeli parantez operatörünün içerisine int türden bir ifade gelmesi gerekmektedir bu durumda öncelikle o ifadenin değeri hesaplanır sonra o listenin o indeksli elamanına erişilir
i = 3 x = 1 my_list[i + x]
listenin bir elemanına erişir iken tam sayı olmayan (int türden olmayan) bir ifade kullanamayız kullandığımız durumda
örnek
my_list[3.4]
“TypeError: list indices must be integers or slices, not float” exception oluşur.
Python range fonksiyonu ile bir liste oluşturalım öncelikle range fonksiyonuna bakalım
range(start, stop, [step]) range(0, 10, 1) -> 0,1,2,3,4,5,6,7,8,9 range(0, 10, 2) -> 0,2,4,6,8 list_a = list(range(0, 10, 2)) list_a -> [0, 2, 4, 6, 8]
python’da stringler iterable (dolaşılabilir) nesnelerdir list sınıfının constructor ‘ına bir string verildiğinde ifadenin her bir elemanı listenin bir öğesi olacak şekilde liste nesnesinde gösterilir örnek
list_s = list('ali) list_s - > ['a','l','i']
şimdi de liste oluşturmanın alternatif syntax’larına bakalım
list_a = [] |
list_a = list() |
list_b = [1, 3, 5, 7, 9] |
list_b = list([1, 3, 5, 7, 9]) |
list_c = ['ali','veli','mehmet'] |
list_c = list(['ali','veli','mehmet']) |
şimdide liste veri yapısında swap işlemini yapalım
prime_list = [2, 3, 5, 7, 11] print('Swap öncesi ', prime_list) temp = prime_list[0] prime_list[0] = prime_list[4] prime_list[4] = temp print('Swap sonrası', prime_list)
Swap öncesi [2, 3, 5, 7, 11]
Swap sonrası [11, 3, 5, 7, 2]
peki temp bir değişken kullanmadan bunu yapabilir miyiz?
python idiomatic bir dil ve bunu yapmamıza imkan sağlayan bir syntaxa sahip
prime_list = [2, 3, 5, 7, 11] print('Swap öncesi ', prime_list) prime_list[0] , prime_list[4] = prime_list[4], prime_list[0] print('Swap sonrası', prime_list)
python da diğer dillerde olduğu gibi fixed size array oluşturamıyoruz ama 10 eleman lı her elemanı 0 (int) değerine sahip bir liste oluşturabiliriz.
örnek:
my_list = [0] * 10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]