Modül dersleri (1/4)
Liste anlama
Liste kavrama, uygulayarak bir liste oluşturan bir ifadedir.
yinelenebilir bir dönüşüm (ve isteğe bağlı olarak bir filtre). Bu
Tek bir satıra for + append yazmanın Pythonic yolu.
# stile imperativo (verboso)
quadrati = []
for n in range(5):
quadrati.append(n * n)
# stile pythonico
quadrati = [n * n for n in range(5)]
# [0, 1, 4, 9, 16]Tam sözdizimi
[espressione for elemento in iterabile if condizione]- ifade: sonuç listesine ne eklenecek
- yinelenebilir öğe için: kaynak döngüsü
- if koşulu (isteğe bağlı): yalnızca eşleşen öğeleri tutar
pari = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]
maiuscole = [p.upper() for p in ["ciao", "mondo"]]
# ['CIAO', 'MONDO']
lunghe = [p for p in ["a", "bb", "ccc", "dddd"] if len(p) >= 3]
# ['ccc', 'dddd']ifadenin içinde if/else (üçlü)
Koşullu olarak dönüştürmek için (filtrelemek yerine), üçlüyü kullanın
for'den ÖNCE ifade:
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]Çoklu kullanım: kartezyen çarpım
Birden fazla for yan tümcesini iç içe yerleştirebilirsiniz:
coppie = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]for cümleciklerinin sırası sanki "içten önce dış" şeklindedir.
iç içe geçmiş döngüler.
Anlama ne zaman kullanılmamalıdır?
- Pek çok iç içe geçmiş
if/elsedalına sahip karmaşık mantık → açık bir döngü kullanın. - Yan etkiler (yazdırma, dosya yazma) → döngü, anlama değil.
- 2'den fazla iç içe düzey → açık bir adlandırılmış döngü neredeyse her zaman daha iyidir.
İç içe liste anlamaları
Tek bir liste kavramasında birden fazla for döngüyü zincirleyebilirsiniz. Örneğin, bir matrisi (listelerin listesini) tek bir düz listeye düzleştirmek için şunu yazabilirsiniz:
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]Döngülerin sırası, geleneksel for döngülerinin iç içe geçme sırasını tam olarak yansıtır.
Deneyin
"Sayılar = [1, 2, 3, 4, 5, 6]" verildiğinde, yalnızca çift sayıların kareleriyle "eşit_kareler" oluşturun. "even_squares"i değerlendirin.
İpucu göster
sonunda n % 2 == 0 ise.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
`words = ['Ciao', 'Mondo', 'Python', 'Java']` göz önüne alındığında, HER kelimenin uzunluğunda `uzunluklar' ve yalnızca 5 karakterden kısa kelimelerle `short_words` oluşturun. `(uzunluklar, kısa_kelimeler)`i değerlendirin.
İpucu göster
İki ayrı anlayış.
3 denemeden sonra çözüm mevcut
Ek zorluk
Use a list comprehension to calculate the squares of only the even integers between 1 and 10 inclusive. Store the list in `even_squares` and evaluate it.
İpucu göster
Yinelemek için range(1, 11)'i, filtrelemek için x % 2 == 0 ise ve ifade olarak x**2'yi kullanın.
3 denemeden sonra çözüm mevcut