Python’da bir değişken içinde birden fazla veriyi depolamak için kullanılan 4 yerleşik veri türü mevcuttur. Bunları bir veri koleksiyonunun ya da diğer programlama dillerindeki dizilerin her biri ayrı özelliklere sahip birer alt kümesi gibi düşünebilirsiniz. Yani her bir dizilere getirilmiş farklı bir programlama yaklaşımıdır.
- Listeler (Lists) : Bir indeks rakamı ile sıralanmış ve değiştirilebilir, aynı veriden birden fazla barındırabilir veri koleksiyonlarıdır.
- Demetler (Tuples) : Bir indeks rakamı ile sıralanmış ancak değiştirilemeyen, aynı veriden birden fazla barındırabilir veri koleksiyonlarıdır. Sabitler dizisi diyebiliriz.
- Kümeler (Sets) : Herhangi bir sıralamaya ya da indeks rakamına sahip olmayan, içinde aynı veriden birden fazla bulunamayan veri koleksiyonlarıdır.
- Sözlükler (Dictionaries) : İndeks rakamına sahip ancak sıralanmamış olan, verileri değiştirilebilen ancak içinde aynı veriden birden fazla bulunmayan veri koleksiyonlarıdır.
İçindekiler
Bu bilgiler ışığında Python’da Koleksiyonları akılda kalıcı olması bakımından şu şekilde görselleştirebiliriz;
Koleksiyon | İndekslenmiş | Sıralanmış | Değiştirilebilir | Veri Tekrarlanabilir |
Listeler | + | + | + | + |
Demetler | + | + | – | + |
Kümeler | – | – | – (Yeni veri eklenip çıkartılabilir) | – |
Sözlükler | + | – | + | – |
LİSTELER (Lists)
Listeler koleksiyon veri türlerinden biridir. Köşeli parantez kullanılarak tanımlanırlar. Tanımlanma ve kullanım özellikleri bakımından diğer programlama dillerindeki dizilere direkt olarak benzerdirler.
personelListesi=["Oben Seven","Aykut Demir","Mert Bozok"] print(personelListesi)
Çıktı:
['Oben Seven', 'Aykut Demir', 'Mert Bozok']
Listede yer alan veriler tıpkı diğer programlama dillerindeki diziler gibi 0’dan başlamak üzere rakamlar ile indekslenerek sıralanmış şekilde depolanırlar. Bu indeks numaraları birbirinden farklı olduğu için, liste içinde aynı veri birden çok kez yer alabilir. Bu veriler istendiğinde değiştirilebilirler. Listeye yeni veri eklenebilir ve mevcut olanlar listeden çıkartılabilir. Listeler sıralanmış oldukları için yeni bir veri eklendiğinde sıranın sonuna yerleşir.
Listenin içinde kaç veri yer aldığını öğrenmek isterseniz len() fonksiyonundan faydalanabilirsiniz.
print("Listedeki veri sayısı:", len(personelListesi))
Çıktı:
Listedeki veri sayısı: 3
Liste içinde bir verinin kaç kez yer aldığını öğrenmek için de count() metodunu kullanabilirsiniz;
liste=[2,7,45,3,7,2,45,7,34,3] print("Listedeki 7 rakamının tekrar sayısı: ", liste.count(7))
Çıktı:
Listedeki 7 rakamının tekrar sayısı: 3
Listedeki verinin sıra numarasını öğrenmek için de index() metodunu kullanabilirsiniz;
liste=[2,7,45,3,7,2,45,7,34,3] print("Listedeki 45 rakamının sıra numarası: ", liste.index(45))
Çıktı:
Listedeki 45 rakamının sıra numarası: 2
Yalnız burada dikkat etmeniz gereken husus; aynı veri liste içinde birden çok kez mevcut ise verinin ilk bulunduğu sıra numarasının verir. Yani yukarıdaki örneği 7 rakamı için yapacak olsaydık bize 1 değerini verecek, sonraki 7 rakamlarının sıra numarasını döndürmeyecekti.
Listeler içerisinde her veri türünden barındırabilir.
yeniListe=["Oben Seven", 05554443322, true]
Diğer programlama dillerinde dizileri köşeli parantezin yanı sıra array() fonksiyonuyla tanımlayabildiğiniz gibi, Python’da listeleri de list() fonksiyonuyla tanımlayabilirsiniz.
yeniListe=list(("Python","Javascript","PHP")) print(yeniListe)
Çıktı:
['Python', 'Javascript', 'PHP']
Liste Elemanlarına Erişmek
Liste elemanları indekslenmiştir, yani birer sıra numarasına sahiptirler. Dolayısıyla bu sıra numarasıyla depoladığı veriye erişmek mümkündür. Listeleri bir değişken adı olarak 0’dan başlayan sıralı sayıları kullanan ve bir değişken içinde gruplanmış değişkenler olarak düşünebilirsiniz.
yeniListe=list(("Python","Javascript","PHP")) print(yeniListe[1])
Çıktı:
Listenin ikinci verisi: Javascript
Eğer listenin sonunda yer alan verilere erişmeniz gerekiyorsa, daha önce listenin kaç veri depoladığını öğrendiğimiz len() fonksiyonu ile sonda yer alan verilerin sıra numarasını öğrenerek kullanabilir;
webProgramlama=list(("Python","Javascript","PHP", "HTML", "CSS", "SQL")) print("Örnek listemiz:", webProgramlama) x=len(webProgramlama) print("Listenin son elemanı:", webProgramlama[x-1]) print("Listenin sondan bir önceki elemanı:", webProgramlama[x-2])
Çıktı:
Listenin son elemanı: SQL Listenin sondan bir önceki elemanı: CSS
ya da özel bir yöntem olan negatif sıra numaraları ile sondan başlayarak listedeki verilere erişebliirsiniz.
print("Listenin son elemanı:", webProgramlama[-1]) print("Listenin sondan iki önceki elemanı:", webProgramlama[-3])
Çıktı:
Listenin son elemanı: SQL Listenin sondan iki önceki elemanı: HTML
Listenin belirli bir bölümünü almak için iki nokta ile ayrılmış sıra numaraları kullanılabilir;
print(webProgramlama[1:3])
Çıktı:
['Javascript', 'PHP']
Burada verilen son sıra numaralı verinin alınmadığına, [1:3] aralığının 1’den 3’e kadar(3 dahil değil) anlamını taşıdığına dikkat ediniz.
Başlangıç sıra numarasını vermediğinizde listenin başından itibaren belirttiğiniz indekse kadar olan verilere ulaşırsınız;
print(webProgramlama[:2])
Çıktı:
['Python', 'Javascript']
Bitiş sıra numarasını vermediğinizde ise sıra numarasını belirttiğiniz veriden listenin sonuna kadar olan verilere ulaşırsınız;
print(webProgramlama[3:])
Çıktı:
['HTML', 'CSS', 'SQL']
Eğer listenin sonunda yer alan belirli bir aralıktaki verilere ulaşmak istiyorsanız benzer şekilde negatif sıra numaralarını kullanabilirsiniz. Fakat burada en çok yapılan yanlış şudur;
print(webProgramlama[-1:-4])
Çıktı:
[]
Listenin sonundan başlayarak sondan 4. sıra numarasına sahip olan veriye kadar olan verileri almak isterseniz [-1:-4] şekilde yazdığınızda sonuç alamayacaksınızdır. Çünkü aralık belirterek liste içindeki verilere ulaşmak istediğinizde her zaman önce küçük sıra numarasını sonra büyük sıra numarasını vermelisiniz. Yani -4 < -1 olduğu için [-4:-1] olarak yazmalısınız;
print(webProgramlama[-4:-1])
Çıktı:
['PHP', 'HTML', 'CSS']
Bir listeden belirli bir aralıktaki verileri alırken, isterseniz adım atlama parametresini de ekleyebilirsiniz. Bu parametre özellikle sayılardan oluşan listeler ile çalışırken faydalı olabilir;
rakamlar=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] print(rakamlar[1:11:2])
Çıktı:
[1, 3, 5, 7, 9]
Eğer başlangıç ve bitiş sıra numaralarını vermeden sadece adım atlama parametresini verirseniz tüm listeye uygulamış olursunuz;
print(numbers[::3])
Çıktı:
[0, 3, 6, 9, 12]
Python’da bu şekilde bir veri koleksiyonundan örnek veriler oluşturup üzerinde çalışmak yeni değişken ve veri içeriği oluşturulmadığı için hafızada yer tutmaz ve daha performanslı çalışır. Bu nedenle üzerinde çalışacağınız her veri grubu için ayrı bir liste oluşturmak yerine bir listeden bu şekilde çekilecek veriler ile çalışmanız daha iyi olacaktır.
Belirli bir verinin liste içinde yer alıp almadığını kontrol etmek için “in” anahtar kelimesini koşullu ifadeler ile birlikte kullanarak test edebilirsiniz;
if "Python" in webProgramlama: print("Evet. Python web programlama için de kullanılan bir yazılım dilidir.")
Çıktı:
Evet. Python web programlama için de kullanılan bir yazılım dilidir.
Liste Verilerini Değişkenlere Atamak
Bir liste içindeki verilere sıra numaraları aracılığıyla erişebiliyoruz. Ancak bunun yerine değişken isimleri vererek de erişebiliriz.
personelVerileri=["Mert Demir", 28, 6, "ReactJS", "NodeJS"] personelAd, personelYas, deneyim, arayuzDili, sunucuDili = personelVerileri print("Personel Adı-Soyadı: ", personelAd) print("Yaşı: ", personelYas) print("Deneyim Süresi: ", deneyim) print("Arayüz Programlama Dili: ", arayuzDili) print("Sunucu Programlama Dili: ", sunucuDili)
Çıktı:
Personel Adı-Soyadı: Mert Demir Yaşı: 28 Deneyim Süresi: 6 Arayüz Programlama Dili: ReactJS Sunucu Programlama Dili: NodeJS
İsterseniz liste içindeki birden fazla veriyi tek bir değişkene atayabilirsiniz. Bunun için *degisken_adı notasyonunu kullanırsınız ve bu şekilde oluşturacağınız değişken de bir liste olur.
personelVerileri2=["Ayberk Seven", 24, 2, "VueJS", "PHP", "Python"] personelAd, personelYas, deneyim, *bildigiDiller = personelVerileri2 print("Personel Adı-Soyadı: ", personelAd) print("Yaşı: ", personelYas) print("Deneyim Süresi: ", deneyim) print("Bildiği Programlama Dilleri: ", bildigiDiller)
Çıktı:
Personel Adı-Soyadı: Ayberk Seven Yaşı: 24 Deneyim Süresi: 2 Bildiği Programlama Dilleri: ['VueJS', 'PHP', 'Python']
Listedeki Verileri Değiştirmek
Bir önceki konuda liste içindeki verilere nasıl eriştiğimizi görmüştük. Aynı şekilde veriye erişip yeni bir değer ataması yapmamızda mümkündür. Tıpkı değişkenlere yeni bir değer atayarak depolanan veriyi değiştirdiğimiz gibi. Tek fark burada değişken ismi yerine değişkenin sıra numarasını kullanıyoruz.
webProgramlama=list(("Python","Javascript","PHP", "HTML", "CSS", "SQL")) print(webProgramlama) webProgramlama[2]="NodeJS" print(webProgramlama)
Çıktı:
['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] ['Python', 'Javascript', 'NodeJS', 'HTML', 'CSS', 'SQL']
Listelerin her tür veri depolayabildiğinden bahsetmiştik. Listenin içindeki herhangi bir veriyi değiştirirken yerine birden fazla veri barındıran bir başka listeyi de yerleştirebilirsiniz. Örneğin listenin son verisini değiştirip yerine bir başka liste yerleştirelim.
webProgramlama[-1]=["MySQL","PostgreSQL"] print(webProgramlama) print(webProgramlama[-1])
Çıktı:
['Python', 'Javascript', 'NodeJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL']]
Peki şu anda webProgramlama listemizin boyu kaç olacaktır?
print("Listemizin boyutu: ", len(webProgramlama))
Çıktı:
Listemizin boyutu: 6
Şu anda listemizde 7 veri mevcut gibi görünüyor, ancak liste boyuna baktığımızda halen 6 olarak veriyor. Bunun nedeni listenin son verisinin de bir liste olmasıdır.
print(type(webProgramlama[-1]))
Çıktı:
<class 'list'>
Bu aynı zamanda çok boyutlu listelere de bir örnektir. Buradaki örneğimizde 2 boyutlu bir liste görüyorsunuz.
Liste içindeki veriye listeAdi[indeks_no] şeklinde ulaşıyorduk. Listenin içindeki listede yer alan verilere ise; listeAdi[icteki_listenin_indeks_no][icteki_listede_verinin_indeks_no] şeklinde erişebiliriz. Örneğin;
Listemiz içinde yer alan listenin indeks numarası hem 5, hem de sonda yer aldığı için -1’dir. Bu içteki listedeki ikinci veriye erişmek istediğimizi düşünelim. İkinci verinin indeks numarası 1’dir.
print(webProgramlama[-1][1])
Çıktı:
PostgreSQL
olacaktır.
Listelerde yukarıda gördüğünüz şekilde tek bir veriyi değiştirebildiğimiz gibi bir aralıktaki verileri de değiştirebiliriz;
print(webProgramlama) webProgramlama[1:3]=["ReactJS","VueJS"] print(webProgramlama)
Çıktı:
['Python', 'Javascript', 'NodeJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL']] ['Python', 'ReactJS', 'VueJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL']]
Listeye Yeni Veri Eklemek
Listeye yeni bir veri eklemek için append() fonksiyonunu kullanırız. Bu durumda yeni veri listenin sonuna eklenir.
webProgramlama.append("ExpressJS") print(webProgramlama)
Çıktı:
['Python', 'ReactJS', 'VueJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL'], 'ExpressJS']
Listede belirli bir konuma yeni veri eklemek için de insert() fonksiyonundan yararlanırız. insert() fonksiyonu 2 parametre alır; birincisi veriyi ekleyeceğiniz sıra numarası, ikincisi veridir.
webProgramlama.insert(3,"AngularJS")
Çıktı:
['Python', 'ReactJS', 'VueJS', 'AngularJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL']]
Bu durumda listede eklenen veriden sonraki verilerin sıra numaralarının birer ötelendiğine dikkat ediniz. Yani listede belirli bir konuma veri eklenirse ondan sonra gelen verilerin sıra numaraları bir artarak değişir.
Listeye bir başka listenin verilerini eklemek için extend() fonksiyonunu kullanabilirsiniz. Yani bu fonksiyon iki listeyi birleştirir.
mobilProgramlama=["Swift","Kotlin","React Native"] webProgramlama.extend(mobilProgramlama) print(webProgramlama)
Çıktı:
['Python', 'ReactJS', 'VueJS', 'AngularJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL'], 'ExpressJS', 'Swift', 'Kotlin', 'React Native']
Bu fonksiyon ile listeleri sadece başka listeler ile birleştirmek zorunda değilsiniz. İsterseniz diğer veri koleksiyonları olan; demetler(tuples), kümeler(sets) ve sözlükleri(dictionaries) de ekleyebilirsiniz.
Listeden Veri Silmek
Listede yer alan bir verinin ne olduğunu biliyorsanız direkt olarak remove() fonksiyonu ile silebilirsiniz. Burada dikkat etmeniz gereken nokta; eğer listede aynı veriden birden fazla mevcutsa ilk sıradaki veriyi sileceğini ve diğerlerinin var olmaya devam edeceğini unutmayın.
webProgramlama.remove("AngularJS") print(webProgramlama)
Çıktı:
['Python', 'ReactJS', 'VueJS', 'HTML', 'CSS', ['MySQL', 'PostgreSQL'], 'ExpressJS', 'Swift', 'Kotlin', 'React Native']
Belirli bir sıra numarasına sahip olan veriyi de, sıra numarasını belirterek pop() fonksiyonu yardımıyla silebilirsiniz.
webProgramlama.pop(5) print(webProgramlama)
Çıktı:
['Python', 'ReactJS', 'VueJS', 'HTML', 'CSS', 'ExpressJS', 'Swift', 'Kotlin', 'React Native']
Eğer pop() fonksiyonunda parametre olarak herhangi bir sıra numarası vermezseniz son veriyi silecektir.
Sıra numarası ile veri silmek için del fonksiyonunu da kullanabilirsiniz.
del webProgramlama[3] print(webProgramlama)
Çıktı:
['Python', 'ReactJS', 'VueJS', 'CSS', 'ExpressJS', 'Swift', 'Kotlin', 'React Native']
Burada tek bir veriyi işaret etmek zorunda değilsiniz, aralık da belirleyebilirsiniz;
del webProgramlama[:2] print("Listenin ilk 2 verisini sildikten sonra:", webProgramlama)
Çıktı:
Listenin ilk 2 verisini sildikten sonra: ['VueJS', 'CSS', 'ExpressJS', 'Swift', 'Kotlin', 'React Native']
Bu fonksiyonu kullanırken dikkatli olmanızı tavsiye ederim. Zira parametre vermeyi unutursanız tüm listeyi silecektir.
del webProgramlama
Eğer listeyi tamamen ortadan kaldırmak istemiyor, sadece içindeki verileri silmek istiyorsanız clear() fonksiyonunu kullanabilirsiniz.
webProgramlama.clear() print(webProgramlama)
Çıktı:
[]
Listelerde Döngüler
Döngüler bir grup veri ile çalışmak için en iyi yöntemdir. Belirli bir işlemi listede yer alan tüm veriler için gerçekleştirmek istediğinizde her bir veri için tek tek kod yazmak yerine döngü kullanarak tüm veriler için işilemin uygulanmasını sağlayabilirsiniz.
Python’da listeler ile çalışırken de döngüleri kullanmak istediğinizde for..in döngüsü size yardımcı olacaktır.
İleride detaylı olarak döngülere değineceğiz ama basit bir örnekle nasıl kullanıldıklarına göz atalım. Örneğin, listenizdeki verileri ekrana yazdırmak istiyorsunuz. Listemiz;
webProgramlama= [‘Python’, ‘Javascript’, ‘PHP’, ‘HTML’, ‘CSS’, ‘SQL’]
olsun. Eğer listedeki tüm verileri ekrana yazdırmak istersek;
webProgramlama=['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] print(webProgramlama[0]) print(webProgramlama[1]) print(webProgramlama[2]) print(webProgramlama[3]) print(webProgramlama[4]) print(webProgramlama[5])
Çıktı:
Python Javascript PHP HTML CSS SQL
Ancak burada gördüğünüz gibi listemizde kaç adet veri varsa o kadar satır kod yazmamız gerekiyor. Peki listemizde 1000 adet veri var ise? Bu durumda aynı kodu 1000 satır boyunca yazmak durumunda mı kalacağız? Tabii ki hayır. Bunun yerine döngü kullanarak sadece 2 satırda aynı sonucu elde edebiliriz;
for x in webProgramlama: print(x)
Benzer şekilde aynı sonucu while döngüsünü kullanarak da elde edebiliriz. While döngsünün kullanımı biraz daha farklıdır. Her bir verinin indeks numarasını kullanarak döngüyü çalıştırırız. Liste içinde kaç adet veri olduğunu da len() fonksiyonu ile tespit edebildiğimize göre while döngüsünü şöyle yazabiliriz;
veriBoyu=len(webProgramlama) x=0 while x < veriBoyu: print(webProgramlama[x]) x+=1
Burada yaptığımız işi açıklamak gerekirse;
Öncelikle liste içinde kaç veri olduğunu bulduk: veriBoyu=len(webProgramlama)
Bir x değişkeni oluşturduk ve bu değişkene listenin en küçük sıra numarasını atadık: x=0
“Verinin sıra numarası liste boyutunden küçük iken” ifadesi ile döngüyü oluşturduk: while x < veriBoyu
x sıra numaralı veriyi ekrana yazdırdık: print(webProgramlama[x])
Döngünün bir sonraki adıma geçip tekrar çalışması için sıra numarasını değişkeninin değerini 1 artırdık: x+=1
x=5 iken döngü son kez çalışacak ve döngü içinde x+=1 ifadesi ile x değişken değeri 6 olduğunda döngü koşulu sağlanmadığı için döngüden çıkılacaktır.
Bu anlatılanları daha net anlamanız için hangi sıra numarasında hangi veriyi yazdırdığını görmek için şu şekilde de kodlayabiliriz;
veriBoyu=len(webProgramlama) x=0 while x < veriBoyu: print(x, ":", webProgramlama[x]) x+=1
Çıktı:
0 : Python 1 : Javascript 2 : PHP 3 : HTML 4 : CSS 5 : SQL
Ancak listelerde döngü oluşturmak için hepsinden daha kısa bir yol daha var; Liste Üreteçleri. Liste Üreteçlerine konunun son kısmında değineceğiz. Hemen göz atmak isterseniz eğer; Liste Üreteçleri birazcık aşağıda yer alıyor.
[print(x) for x in webProgramlama]
Çıktı:
Python Javascript PHP HTML CSS SQL
Listeleri Sıralamak
Liste içinde yer alan verileri harf sırasına göre A’dan Z’ye sıralamak için ya da veri sayısal ise küçükten büyüğe sıralamak için sort() metodunu kullanabilirsiniz.
webProgramlama.sort() print(webProgramlama)
Çıktı:
['CSS', 'HTML', 'Javascript', 'PHP', 'Python', 'SQL']
Eğer verilere özel bir sıralama uygulamak isterseniz kendi fonksiyonunuzu yazabilir ve bu fonksiyonu sort(key=fonksiyon) metoduna parametre olarak vererek buna göre sıralama yapmasını isteyebilirsiniz. Bu sıralama konusundaki imkan kabiliyetinizi oldukça artıracak bir yöntemdir.
Örneğin, standart sıralama fonksiyonu aslında küçük büyük harfe duyarlı bir fonksiyondur ve önce büyük harf ile başlayan kelimeleri daha sonra küçük harf ile başlayan kelimeleri kendi arasında sıralaması yanlış sonuçlar elde edilmesine sebep olur. Bunu düzeltmek için veri grubunuzdaki tüm harfleri büyük ya da küçük harf ile başlayacak standart formata getirip sıralanmasını sağlayabilirsiniz.
personel=["Ahmet Değirmenci", "Burak Bars", "Deniz Cağaloğlu", "emine demir", "aykut Şanlı", "Zeynep DAĞHAN", "veli Koray"] personel.sort() print(personel) personel.sort(key=str.upper) print(personel)
Çıktı:
['Ahmet Değirmenci', 'Burak Bars', 'Deniz Cağaloğlu', 'Zeynep DAĞHAN', 'aykut Şanlı', 'emine demir', 'veli Koray'] ['Ahmet Değirmenci', 'aykut Şanlı', 'Burak Bars', 'Deniz Cağaloğlu', 'emine demir', 'veli Koray', 'Zeynep DAĞHAN']
Bir başka örnek ile fonksiyona göre sıralamayı pekiştirelim. Aşağıda bir grup rakamlardan oluşan bir liste için her bir liste verisinin 50 rakamı ile farkını bulup buna göre küçükten büyüğe sıralanmasını sağladık. Yani 50’ye en yakın olandan 50’ye en uzak olan rakma doğru bir sıralama elde ettik;
def farkHesapla(rakam): return abs(rakam-50) rakamlar=[10, 100, 49, 78, 24, 40, 60, 5, 86, 67] rakamlar.sort(key=farkHesapla) print(rakamlar)
Çıktı:
[49, 40, 60, 67, 24, 78, 86, 10, 5, 100]
Standart olarak küçükten büyüğe yapılan sıralamayı tersine çevirmek ve büyükten küçüğe sıralamak için de reverse() metodunu kullanabilirsiniz. Tek başına kullanıldığında listedeki verileri ters yönde sıralayan bu metodu sort() metodu ile sıralı kullanarak istediğiniz sonucu alabilirsiniz.
webProgramlama=['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] print(webProgramlama) webProgramlama.reverse() print(webProgramlama) webProgramlama=['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] webProgramlama.sort() webProgramlama.reverse() print(webProgramlama)
Çıktı:
['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] ['SQL', 'CSS', 'HTML', 'PHP', 'Javascript', 'Python'] ['SQL', 'Python', 'PHP', 'Javascript', 'HTML', 'CSS']
Listeleri Kopyalamak
Listeleri onlara referans vererek liste1 = liste2 şeklinde kopyalamanız mümkün değildir. Çünkü bu şekilde birinde yaptığınız değişiklik diğerine de yansıyacaktır.
liste1=['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] liste2=liste1 print(liste2) print(id(liste1)==id(liste2)) liste2[1]="VueJS" liste1[5]="MySQL" print(liste1) print(liste2) print(id(liste1)==id(liste2))
Çıktı:
['Python', 'Javascript', 'PHP', 'HTML', 'CSS', 'SQL'] True ['Python', 'VueJS', 'PHP', 'HTML', 'CSS', 'MySQL'] ['Python', 'VueJS', 'PHP', 'HTML', 'CSS', 'MySQL'] True
Gördüğünüz gibi bu iki liste aslında birbirinin kopyası değil, aynısı. Hafızada aynı yeri işaret eden ancak iki farklı isim taşıyan bir değişkendir.
Dolayısıyla ilk listenin yeni bir kopyası değildir. Bir listenin bağımsız bir kopyasını oluşturmak istiyorsanız copy() metodundan faydalanabilirsiniz.
liste3=liste1.copy() liste3[4]="CSS3" print(liste1) print(liste2) print(liste3) print(id(liste1)==id(liste3))
Çıktı:
['Python', 'VueJS', 'PHP', 'HTML', 'CSS', 'MySQL'] ['Python', 'VueJS', 'PHP', 'HTML', 'CSS', 'MySQL'] ['Python', 'VueJS', 'PHP', 'HTML', 'CSS3', 'MySQL'] False
Gördüğünüz gibi Liste1’den copy() metodu yardımıyla liste3 isimli yeni bir liste oluşturduğumuzda ve listelerden herhangi birinin verilerini değiştirdiğimizde diğeri bu durumdan etkilenmiyor. copy() metoduyla öncekinden bağımsız ancak aynı verilere sahip yeni bir liste oluşturuyoruz.
Benzer şekilde copy() metodu yerine list() metodunu da kullanabilirsiniz. Liste oluşturmamızı sağlayan list() metodu da öncekinden bağımsız yeni bir liste oluşturmanızı sağlar.
Listeleri Birleştirmek
Python’da birden fazla listenin verilerini birleştirmek için bir çok yöntem vardır. Bunlardan biri; yeni bir liste oluşturmak için kullanabileceğiniz bildiğimiz toplama işlemi yapan “+” operatörüdür.
yazilimEkibi=["Ahmet", "Hakan", "Berk", "Ceren"] tasarimEkibi=["Banu", "Koray"] personel= yazilimEkibi + tasarimEkibi print(personel)
Çıktı:
['Ahmet', 'Hakan', 'Berk', 'Ceren', 'Banu', 'Koray']
Eğer, iki listenin verileri birleştiren üçüncü bir liste oluşturmak istemiyor, sadece bir listeye diğer listenin verilerini eklemek istiyorsanız extend() metodunu kullanabilirsiniz.
projeler1=["proje1", "proje2", "proje3"] projeler2=["design1","design2"] projeler1.extend(projeler2) print(projeler1)
Çıktı:
['proje1', 'proje2', 'proje3', 'design1', 'design2']
Liste Üreteçleri
Liste üreteçleri, varolan bir listenin verileriyle yeni bir liste oluşturmak istediğinizde kısa bir kod yazım tekniği sunar.
Standart olarak bir listenin verilerinden bir başka liste oluşturmak istersek;
yeniListe=[] for x in liste: yeniListe.append(x)
şeklinde kodlayabiliriz. Bunu liste üreteçleriyle tek satırda yazabiliriz;
yeniListe = [x for x in liste]
Eğer liste içindeki tüm elemanları değil de belirli bir koşula uyan elemanları filtreleyerek alacak isek;
yeniListe=[] for x in liste: if koşul in x: yeniListe.append(x)
Bu koşullu liste oluşturma kodunu da liste üreteçleriyle kısa bir şekilde yazmak istersek;
yeniListe=[x for x in liste if koşul in x]
şeklinde yazabiliriz.
Ya da iç içe döngüleri liste üreteçleri yardımıyla tek satırda kodlayabiliriz. Örneğin aşağıdaki gibi bir liste içinde yer alan 4 liste içindeki verilerden oluşan yeni bir liste oluşturmak istediğimizde;
listem = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] # Klasik yöntem ile içiçe for döngüsü kullanarak yapabiliriz. yeniListe=[] for x in listem: for y in x: yeniListe.append(y) print(yeniListe) # Ya da liste Üreteçlerini kullanarak daha kısa ve performanslı yazabiliriz. yeniListe2=[y for x in listem for y in x] print(yeniListe2)
Çıktı:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Gördüğünüz gibi klasik yöntemlerle iç içe for döngüleri ile oluşturduğumuz kodu liste üreteciyle tek satırda yazabildik.
Benzer şekilde, elimizdeki webProgramlama isimli listedeki verilerden içinde P harfi olanlar ile yeni bir liste oluşturmak istersek Liste Üreteçleri olmadan bunu for döngüsü yardımıyla gerçekleştirebiliriz;
yeniListe=[] for x in webProgramlama: if "P" in x: yeniListe.append(x) print(yeniListe)
Çıktı:
['Python', 'PHP']
Oysa Liste Üreteçleri ile bu işlemi tek satır kod yazarak gerçekleştirebiliriz;
[print(x) for x in webProgramlama if "P" in x ]
Çıktı:
['Python', 'PHP']
Dilerseniz filtreleme yaparken birden fazla iç içe koşullu ifade de kullanabilirsiniz;
[print(x) for x in webProgramlama if "P" in x if "y" in x]
Çıktı:
Python
Bir başka örnek olarak; 0 ile 100 arasında 15 ile bölünebilen sayıları bulunuz;
[print(x) for x in range(1,100) if x % 3 == 0 if x % 5 == 0]
Çıktı:
15 30 45 60 75 90
Buradaki koşullu ifade alanı bir filtre gibi davranmaktadır. Listenin içinden belirli verileri alarak yeni bir liste oluşturmanızı sağladığı gibi, bunları hariç tutarak yeni bir liste oluşturmanızı da sağlayabilir. Önceki örneği PHP verisini hariç tutarak yeni bir liste oluşturacak şekilde şöyle yazabiliriz;
yeniListe3=[x for x in webProgramlama if x != "PHP" ] print(yeniListe3)
Çıktı:
['Python', 'Javascript', 'HTML', 'CSS', 'SQL']
Yeni listeyi oluşturma anında liste verilerine python methodları ile müdahale de edebilirsiniz;
yeniListe4=[x.upper() for x in webProgramlama] print(yeniListe4)
Çıktı:
['PYTHON', 'JAVASCRIPT', 'PHP', 'HTML', 'CSS', 'SQL']
Örnek; 10’a kadar pozitif doğal sayıların oluşturduğu bir listeden 5’e kadar olan sayıları alarak yeni bir liste tanımlayın.
yeniListe4=[x for x in range(10) if x<5] print(yeniListe4)
Çıktı:
[0, 1, 2, 3, 4]
Yeni liste oluşturulurken sadece eski liste verileri için koşullu ifadeler ile filtreleme yapmak zorunda değilsiniz, gerekirse yeni liste verilerine de oluşturma anında koşullu ifadeler ile müdahale edebilirsiniz. Örneğin, eski listenin verilerini belirli bir koşula bağlı olarak değiştirmek için;
yeniListe6=[x if x != "Javascript" else "VueJS" for x in webProgramlama ] print(yeniListe6)
Çıktı:
['Python', 'VueJS', 'PHP', 'HTML', 'CSS', 'SQL']
İfademiz, “eğer webProgramlama listesi içindeki veri Javascript değilse veriyi yeni listeye al, Javascript ise VueJS verisini al” anlamına geliyor.
Birden fazla liste arasında işlem gerçekleştirerek üçüncü bir liste de oluşturabilirsiniz;
tekSayilar=[1,3,5,7,9] ciftSayilar=[2,4,6,8] carpim = [x * y for x in tekSayilar for y in ciftSayilar] print(carpim)
Çıktı:
[2, 4, 6, 8, 6, 12, 18, 24, 10, 20, 30, 40, 14, 28, 42, 56, 18, 36, 54, 72]
Gördüğünüz gibi Liste Üreteçleri ile listeler üzerinde filtreleme yaparak, veriyi değiştirerek, koşullu ifadeler kullanarak bir çok işlem gerçekleştirebiliyor ve yeni listeler üretebiliyoruz.
Şimdi de gerçek hayat uygulamalarına yakın bir örnekle daha kompleks liste üreteçlerinin nasıl kullanıldığına göz atalım.
Soru:
Bir uygulama geliştirdiğimizi ve kayıt olan her bir kişi için 4 karakterlik bir kullanıcı id tanımladığımızı düşünelim. Bu id’lerin ilk 2 karakteri alfabeden(veritabanına kayıt için ingiliz alfabesi) son 2 karakteri ise rakamlardan oluşsun. Acaba bu şekilde uygulamamıza kaç kişiyi kaydedebiliriz?
Çözüm:
Her problem çözümü gibi öncelikle elimizdeki bilinen verileri yazarak işe başlayalım;
harfler=”abcdefghijklmnopqrstuvwxyz”
rakamlar=”0123456789″
Bir düşünce şekli; önce harf ikililerinden bir liste oluşturmak, sonra rakam ikililerinden bir liste oluşturmak ve bu iki listeden ikilileri birbirleriyle birleştirerek çözüm listesini oluşturmak olabilir.
harfler = 'abcdefghijklmnopqrstuvwxyz' rakamlar = '0123456789' harf_ikilileri=[x+y for x in harfler for y in harfler] rakam_ikilileri=[x+y for x in rakamlar for y in rakamlar] idler=[x+y for x in harf_ikilileri for y in rakam_ikilileri] print(len(idler))
Çıktı:
67600
Ancak iki liste üretecini birleştirerek yeni bir liste üreteci oluşturmanın daha basit bir kullanım şekli de var;
harfler = 'abcdefghijklmnopqrstuvwxyz' rakamlar = '0123456789' idler=[a+b+c+d for a in harfler for b in harfler for c in rakamlar for d in rakamlar] print(len(idler))
Çıktı:
67600
Derste işlenen tüm örnekleri bir arada incelemek isterseniz şu adreste çalıştırıp göz atabilirsiniz;
https://repl.it/@ObenSEVEN/Listeler
Bağlantıda Kalalım