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.
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.
#!/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
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.
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.
Döngü şartını sağladığı sürece aktif olarak çalışacaktır son bulması için döngü şartını sağlamaması gerekir.
Aslında özetle x değeri üzerinde y değerleri erişimi için kullanılır.
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.
for x in xrange(1, 11): for y in xrange(1, 11): print '%d * %d = %d' % (x, y, x*y)
for x in xrange(3): if x == 1: break
for x in xrange(3): print x else: print 'Sonuc x = %d' % (x)
string = "Merhaba Dünya!" for x in string: print x
collection = ['Merhaba', 5, 'd'] for x in collection: print x
list_of_lists = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]] for list in list_of_lists: for x in list: print x
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
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.
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 [wiki.python.org]
Yorumlar