Non-Scalar Veri Tiplerinde for
fordöngüsünü işlerkenfor<değişken>in<obje>yapısında, her iterasyondadeğişkenin tek tekobjenin elemanlarına eşit olduğunu konuşmuştuk.
list,tuple,dictionarynon-scalar veri tiplerini gördük ve bunların hepsinin içsel bir yapısı var, şimdi bunların elemanlarındaforkullanarak iterasyon yapmaya bakalım.
Listelerde İterasyon
- Diyelim ki öğrencilerin notlarını bir listede tutuyoruz.
notlar = [90,72,81,77]
for e in notlar:
print(e)
90 72 81 77
- Bu sınıftaki not ortalamasına bakmak istiyor olabilirim.
t = 0
for e in notlar:
t += e
ortalama = t / len(notlar)
print(ortalama)
80.0
- Burada
e'nin özel bir anlamı yok, sadece döngünün içinde onu kullanırken o adla referans veriyorum, adıpenguende olabilirdi.
t = 0
for penguen in notlar:
t += penguen
ortalama = t / len(notlar)
print("Ortalama:",ortalama)
Ortalama: 80.0
- Bunun aynısını range() fonksiyonu ile de yapabilirdik.
for e in notlardiyince ilk iterasyondaenin değeri 90, ikincisinde 72... olarak devam etti.
range()ile indexlerde iterasyon yapıp indexing ile değerlerine de ulaşabilirdim. (Range belirli bir listenin indexlerinde iterasyon yapmamı sağlamıyor, range(len(notlar)) diyince bize0,1,2.. len(notlar)-1sayılarını verecek, bunlar da listenin indexleriyle örtüşüyor, yoksarange()index verir diye bir şey yok.)
for i in range(4):
print("Iteration: ", i)
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
t = 0
for i in range(len(notlar)):
t += notlar[i]
ortalama = t / len(notlar)
print("Ortalama:",ortalama)
Ortalama: 80.0
- Diyelim ki öğretmen farketti ki herkese 5 puan az vermiş, herkesin puanını 5 arttırmak istiyor, bunu direkt listenin elemanlarında iterasyon yaparak yapamam. Listenin indexlerine erişip o değeri güncellemem lazım.
notlar
[90, 72, 81, 77]
for e in notlar:
print(e)
90 72 81 77
- Buradaki
esadecenotların içindeki değerler,e'yi değiştirmek listenin elemanlarını değiştirmez!
for e in notlar:
print(e)
e = e + 10
print(e)
print(notlar)
print("--------------")
print(notlar)
90
100
[90, 72, 81, 77]
--------------
72
82
[90, 72, 81, 77]
--------------
81
91
[90, 72, 81, 77]
--------------
77
87
[90, 72, 81, 77]
--------------
[90, 72, 81, 77]
- Güncelleme mantığını range() ile indexlerinde iterasyon yaparak yapacağım.
for i in range(len(notlar)):
notlar[i] += 5
notlar
[95, 77, 86, 82]
- Hadi biraz da
continuemantığının alıştırmasını yapmış olalım. Diyelim ki öğretmen 2. öğrencinin kağıdını doğru okumuş, 2. öğrenci (index 1'deki) hariç hepsinin değerini 5 arttıracak:
notlar = [90,72,81,77]
for i in range(len(notlar)):
if i == 1:
continue
notlar[i] += 5
print(notlar)
[95, 72, 86, 82]
- Şimdi de
breakegzersizi yapalım.
- Diyelim ki bir listenin içinde belirli bir eleman var mı diye kontrol etmek istiyoruz. Bulunca aramaya devam etmeyeceğim. Devam etme mantığını
breakile sağlayacağım.
- İlk kullanıcıya hangi sayıyı aradığını soracağız, sonra bu sayı var mı kontrol edeceğiz.
x = int(input("Hangi sayıyı kontrol edeyim?:"))
l = [2,3,40,100,10,1]
for e in l:
print(e) # iterasyon break ile çıkmış mı görelim mi diye
if e == x:
print("Buldum!!")
break
Hangi sayıyı kontrol edeyim?:100
2
3
40
100
Buldum!!
Tuple'lerda İterasyon
- Listelerde iterasyondan hiç bir farkı yok. Evet kısa bir açıklama oldu ama durum bu :) . Değerlerini güncelleyemiyoruz ama bu zaten döngüden bağımsız bir durum oluyor.
t = (1,2,3,4)
for e in t:
print(e)
1 2 3 4
toplam = 0
for e in t:
toplam += e
print(toplam)
10
for i in range(len(t)):
print(t[i])
1 2 3 4
for i in range(len(t)):
t[i] += 2
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-37-51c8ededb856> in <module>
1 for i in range(len(t)):
----> 2 t[i] += 2
TypeError: 'tuple' object does not support item assignment
Dictionary'lerde İterasyon
- Burada durum biraz farklı. Default olarak elemanlarında dolaş diyince
key'lerde iterasyon yapıyor. Zaten index mantığı olmadığı için range() ile yapmak çoğu zaman karşımıza çıkmaz.
d = {"student_1": [90,89], "student_2": [80,83], "student_3": [72,71]}
for k in d:
print(k)
student_1
student_2
student_3
- Değerlerine ulaşmak istiyorsam şöyle yapabilirdim:
for k in d:
v = d[k]
print(v)
[90, 89]
[80, 83]
[72, 71]
- Veya d.values() diyerek value'lerında iterasyon yapabilirim. Burada
for<değişken>in<obje>yapısında<değişken>int vs gibi şeyler değil liste gibi yapılar da olabilir iterasyon içerisinde, burada da öyle oldu.
- bu .values() 'dan dolayı olan bir şey değil, dictionary'nin value'lerı int olsa böyle olmazdı.
d = {"student_1": 90, "student_2": 80, "student_3": 72}
for v in d.values():
print(v)
90 80 72
d = {"student_1": [90,89], "student_2": [80,83], "student_3": [72,71]}
for v in d.values():
print(v)
[90, 89]
[80, 83]
[72, 71]
- Burada
v, her iterasyondaint .
- 85'den fazla alan biri var mı diye bakmak istiyorum diyelim, ve bunun kim olduğunu (olduklarını) bulmak istiyorum.
d = {"student_1": 90, "student_2": 80, "student_3": 72}
for k in d:
value = d[k]
if value > 85:
print(k)
student_1
- Aynı anda hem
keyhem devalue'larda iterasyon yapmak için:
- Variable unpacking konusunda bir tuple, liste gibi yapıların değerlerini birden çok değişkene bir seferde eşitlemeyi görmüştük.
- Bunun aynısını iterasyonda da yapabiliriz.
for k,v in d.items():
print("key değeri:", k, "value değeri:", v)
key değeri: student_1 value değeri: 90
key değeri: student_2 value değeri: 80
key değeri: student_3 value değeri: 72
Quiz
Answer the questions to check your understanding.
This lesson includes a short quiz.
Lesson discussion
Swap insights and ask questions about Python Temel
Be the first to start the discussion
Ask a question or share your thoughts about this lesson.