Ana içeriğe geç
Modül 6 · Ders 1 ders 4Kurstaki 21/36~12 min
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.

Python
# 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

Python
[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
Python
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:

Python
[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:

Python
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/else dalı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:

Python
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

Egzersiz#python.m6.l1.e1
Denemeler: 0Yükleniyor…

"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.

Düzenleyici yükleniyor…
İpucu göster

sonunda n % 2 == 0 ise.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#python.m6.l1.e2
Denemeler: 0Yükleniyor…

`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.

Düzenleyici yükleniyor…
İpucu göster

İki ayrı anlayış.

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#python.m6.l1.e3
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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