1390

Python Dersleri: Baştan Sona Python Programlama Eğitimi

Python Döngü Operatörleri

Pythonda list comphensions, zip fonksiyonu ve range fonksiyonlarını nedir ve nasıl kullanılır?



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)