husonet | Tarih: 18.09.2014
Python For Döngüsü
For Loop döngüleri, Liste veya dizeleri öğeleri üzerinde yineleme olanağı sağlar.
Diziler birden fazla elamanı bir araya getiren adreslerdir. Bir dizi sırasıyla öğlerini işleme koyar ve son öğeye kadar ifade bloğunu işleme koyar.
Ne zaman For Loop döngüsü kullanılmalı.
N defa kod tekrarlanması istenildiğinde döngüler geleneksel olarak kullanılır. Koşul yerine getirildiği sürece döngü devam edecektir.
Akış Diyagramı
Örnekler
#!/usr/bin/python
for karakter in 'Pythontr': # ilk ornek
print 'harf harf :',karakter
meyveler = ['elma', 'muz', 'portakal', 'mandalina']
for meyve in meyveler: # ikinci ornek
print 'Meyve :', meyve
Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu verir:
harf harf : P
harf harf : y
harf harf : t
harf harf : h
harf harf : o
harf harf : n
harf harf : t
harf harf : r
Meyve : elma
Meyve : muz
Meyve : portakal
Meyve : mandalina
Dizi indexi tarafından yineleme
Bu örnek dizinin elemanlarına erişim için alternatif bir yol izler. Dizin erişimi ofsetine göre yapılır. Aşağıdaki örneğe bakınız.
#!/usr/bin/python
meyveler = ['elma', 'muz', 'portakal', 'mandalina']
for index in range(len(meyveler)):
print 'Su andaki meyve:', meyveler[index]
Yukarıdaki kod yürütüldüğünde aşağıdaki sonucu verir:
Su andaki meyve: elma
Su andaki meyve: muz
Su andaki meyve: portakal
Su andaki meyve: mandalina
Yukarıdaki örneğimizde yineleme işleminin gerçek sırasını range ile toplam dizi sayısını len fonksiyonuyla bularak yapıyoruz.
Döngülerle birlikte else deyimini kullanma
Python döngüler de else kullanımına destekler.
Else deyimi for döngüsü ile kullanılması durumunda döngü listesinde ilerlerken tükendiği zaman, else deyimi yürütülür.
Else deyimi bir while döngüsü ile kullanılırsa, else ifadesi koşul yanlış olurca yürütülür.
#!/usr/bin/python
for num in range(10,20): # 10 ila 20 arasindaki sayilarii dondur
for i in range(2,num): # sayi faktorlerini yineler
if num%i == 0: # ilk faktoru belirler
j=num/i # ikinci faktoru belirler
print '%d esittir %d * %d' % (num,i,j)
break # Bir sonraki numaraya gecmek icin
else: # else dongunun bir parcasi
print num, ' bir asal sayi'
Yukarıdaki kod yürütüldüğünde aşağıdaki sonucu verir:
10 esittir 2 * 5
11 bir asal sayi
12 esittir 2 * 6
13 bir asal sayi
14 esittir 2 * 7
15 esittir 3 * 5
16 esittir 2 * 8
17 bir asal sayi
18 esittir 2 * 9
19 bir asal sayi
Örneğin 0 den 2 ye kadar devam edecek kod parçacağı yazalım.
for x in range(0, 3):
print "Deger %d" % (x)
Örneğin sonsuza kadar tekrar edecek bir kod yazalım, bu örneğimiz While Loop örneği olsun.
x = 1
while True:
print "Değer %d" % (x)
x += 1
Görüldüğü üzere farklı değerler üzerinde döngülerimizi oluşturabiliriz. Sonsuz döngümüzdeki değerleri yakalayabilmek için aslında büyük değerlerde verebilirdik fakat gereksiz bir işlem olur.
For Loop Nasıl Çalışır?
Döngü şartını sağladığı sürece aktif olarak çalışacaktır son bulması için döngü şartını sağlamaması gerekir.
Python iç içe for döngüsü
Aslında özetle x değeri üzerinde y değerleri erişimi için kullanılır.
range ve xrange
Python'da bir dizi sayı elde etmenin iki yolu vardır: range ve xrange. Genellikle programcılar arasında range daha yaygın bilinir. Fakat xrange fonksiyonu C programlama dili ile yazılmıştır kaynak yönetimi daha iyidir ve uzun listelerde daha hızlı çalışmaktadır. Kısa listelerde range fonksiyonunu tercih edebilirsiniz.
Python For döngüsü örnekleri
İç içe döngüler
for x in xrange(1, 11):
for y in xrange(1, 11):
print '%d * %d = %d' % (x, y, x*y)
Döngüden erken çıkış
for x in xrange(3):
if x == 1:
break
For:Else
for x in xrange(3):
print x
else:
print 'Sonuc x = %d' % (x)
Bir string (Iterable) dizeler
string = "Merhaba Dünya!"
for x in string:
print x
Bir string (Iterable) listesi
collection = ['Merhaba', 5, 'd']
for x in collection:
print x
Listeden liste
list_of_lists = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]
for list in list_of_lists:
for x in list:
print x
Kendi Iterable listesi olusturan bir nesne yazalım
class Iterable(object):
def __init__(self,values):
self.values = values
self.location = 0
def __iter__(self):
return self
def next(self):
if self.location == len(self.values):
raise StopIteration
value = self.values[self.location]
self.location += 1
return value
range ve xrange time testi
import time
#use time.time() on Linux
start = time.clock()
for x in range(10000000):
pass
stop = time.clock()
print stop - start
start = time.clock()
for x in xrange(10000000):
pass
stop = time.clock()
print stop - start
Küçük listelerde range ve xrange zaman ölçümü
import time
#use time.time() on Linux
start = time.clock()
for x in range(1000):
pass
stop = time.clock()
print stop-start
start = time.clock()
for x in xrange(1000):
pass
stop = time.clock()
print stop-start
Görüldüğü üzere küçük listelerde range fonksiyonu daha kısa sürüyor.
Kendi range fonksiyonumuzu yazalım
def my_range(start, end, step):
while start <= end:
yield start
start += step
for x in my_range(1, 10, 0.5):
print x
Kaynak: https://wiki.python.org/moin/ForLoop