Pythonda Döngü Operatörleri
Pythonda döngü hazırlarken işimizi kolaylaştıracak bazı kullanımlar mevcuttur. Sırasıyla list comphensions, Zip fonksiyonu ve Range fonksiyonlarını öğrenelim.
Python List Comphensions
1-10' a sayıları bir liste içerisine almak istersek önce range(10) diyerek bir range objesi oluştururuz ve for yardımıyla her bir elemana ulaşıp numbers listesi içerisine append ederiz.
Örnek
numbers = [] for x in range(10): numbers.append(x)
Gördüğünüz gibi bu listeyi range(10) diyerek kolaylıkla oluşturabiliriz. Ancak list comphensions ile bunu çok daha kolay bir şekilde yapabiliriz.
Örnek
numbers = [x for x in range(10)]
range(10) ile oluşturulan nesne üzerindeki her bir eleman ikinci x içerisine kopyalanır ve olduğu gibi aynı değeri birinci x içerisine tekrar kopyalanır.
Peki neden iki tane x değeri kullanıyoruz ?
Örneğin her gelen sayının karesini bir listede saklamak isteyelim.
Örnek
numbers = [] for x in range(10): numbers.append(x**2)
Gördüğünüz gibi for döngüsünde her bir x değerini range(10)' dan alıp x' e kopyalıyoruz ve sonrasında tekrar x' e ulaşıp karesini alıyoruz aslında aynı işlem comphension içerisinde de bu şekilde oluyor.
Örnek
numbers = [x**2 for x in range(10)]
peki range(10)' dan gelen her sayıyı istemiyorsak ?
Örnek
numbers = [x**2 for x in range(10) if x%2==0]
bir filtrelemeyi hemen range(10) dan sonra ekleyebiliriz ve bize sadece çift sayılar gelir ve çiftlerin karelerini listede saklamış oluruz.
Peki ya string üzerinde list comphensions' i nasıl kullanacağız ?
Örnek
myString = 'Hello' myList = [] for letter in myString: myList.append(letter) print(myList) # ['H','e','l','l','o']
Aynısını list comphensions ile yaparsak işimiz oldukça kolay.
Örnek
myList = [letter for letter in myString] print(myList) # ['H','e','l','l','o']
Her bir karakter liste içerisine eklenir.
Örnek
years = [1983, 1999, 2008, 1956, 1986] ages = [2019-year for year in years] print(ages)
years listesi içinde verilen doğum tarih bilgilerini kolaylıkla 2019' dan çıkararak ages listesi içerisine atabiliyoruz.
Örnek
results = [x if x%2==0 else 'TEK' for x in range(1, 10)]
1-10 arasında gelen her sayıyı x' e aktarıyoruz ancak liste içerisine eklemeden önce çift ise sayının kendisini tek ise 'TEK' yazısını liste içerisine atıyoruz.
Dolayısıyla ekran çıktısı aşağıdaki gibi olur.
['TEK', 2, 'TEK', 4, 'TEK', 6, 'TEK', 8, 'TEK']
Peki iç içe for döngüsüyla oluşturacağım liste guruplarını list comphensions ile nasıl yapabiliriz ?
Örnek
result = [] for x in range(3): for y in range(3): result.append((x,y)) print(result) #[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Aynı listeyi list comphensions ile yapalım.
Örnek
numbers = [(x,y) for x in range(3) for y in range(3)] print(numbers) #[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Hatta işi ilerletirsek 3. gurubu da ekleyebiliriz.
Örnek
numbers = [(x,y,z) for x in range(3) for y in range(3) for z in range(3)] print(numbers)
Ekran çıktısı;
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]
Zip Fonksiyonu
Bazen birden fazla listeyi bir liste içerisinde toplamak isteyebiliriz. Bu durumda zip fonksiyonu kullanabiliyoruz.
Örnek
list1 = [1,2,3,4,5] list2 = ['a','b','c','d','e'] list3 = [100,200,300,400,500] print(list(zip(list1, list2, list3)))
Öncelikle 3 listeyi zip nesnesine ve ardından list metodu ile tekrar listeye çevirmiş oluyoruz.
Ekran çıktısı;
[(1, 'a', 100), (2, 'b', 200), (3, 'c', 300), (4, 'd', 400), (5, 'e', 500)]
3 listenin de her bir elemanı oluşan liste içerisinde tuple olarak birleştiriliyor.
listeye çevirmek yerine for döngüsüde kullanabiliriz.
Örnek
for item in zip(list1, list2, list3): print(item)
Ekran Çıktısı;
(1, 'a', 100) (2, 'b', 200) (3, 'c', 300) (4, 'd', 400) (5, 'e', 500)
Range Fonksiyonu
Peki belli sayıdaki tekrarlayan işlemleri for döngüsü ile nasıl yapacağız ?
Örnek
sayilar = [1,2,3,4,5] for sayi in sayilar: print('Merhaba')
Bu şekilde ekrana 5 kere Merhaba yazdırmak istiyorsak ve elimizde 5 elemanlı bir liste varsa işimizi hallederiz ancak 5 kere değil 5000 kere yazdırmak istersek bu durumda 5000 elemanlı bir listeyi nereden bulacağız ?
İşte burada range fonksiyonu imdadımıza yetişir ve istediğimiz eleman sayısına sahip bir listeyi bize hazırlar.
Range fonksiyonu ile for döngüsünün dönme sayısı kadar tekrarlayan işlemler yapabiliriz.
result = list(range(5)) print(result) # [0,1,2,3,4]
Gördüğünüz gibi range(5) dediğimizde bizim için bir object üretilir ve biz bu objeyi list() ile listeye çevirdiğimizde elimize [0,1,2,3,4] listesi gelir. Peki bunu for döngüsünde kullanalım.
Örnek
for i in range(5): print(i)
Bu şekilde ekrana 0-5 arasındaki tüm sayılar yazdırılır. 5 dahil değil.
Dolayısıyla 5 defa ekrana Merhaba yazdırmak oldukça kolay hale geldi.
Örnek
for i in range(5): print('Merhaba')
Peki 50-100 arasında bir liste üretmek istersek ?
Örnek
for i in range(50,100): print(i)
50-100 arasındaki sayılar ekrana yazdırılır.
Peki 50-100 arasında 2 şer 2 şer sayıları yazdırmak istersek ?
for i in range(50,100,2): print(i)
50-100 arasındaki sayılar 2 şer 2 şer ekrana yazdırılır. (50,52,54...98)