Lompati ke konten utama
Modul 6 · Pelajaran 1 dari 421/36 dalam kursus~12 min
Pelajaran modul (1/4)

Pemahaman daftar

pemahaman daftar adalah ekspresi yang membuat daftar dengan menerapkan transformasi (dan opsional filter) menjadi iterable. Itu adalah Cara Pythonic untuk menulis for + append dalam satu baris.

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]

Sintaks penuh

Python
[espressione for elemento in iterabile if condizione]
  • ekspresi: apa yang harus dimasukkan ke dalam daftar hasil
  • untuk elemen yang dapat diubah: loop sumber
  • jika kondisi (opsional): hanya menyimpan elemen yang cocok
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']

if/else di dalam ekspresi (terner)

Untuk mengubah secara kondisional (bukan memfilter), gunakan ternary ekspresi SEBELUM for:

Python
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]

Multi-untuk: produk kartesius

Anda dapat menyarangkan beberapa klausa for:

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)]

Urutan klausa for adalah "luar-sebelum-dalam", seolah-olah merupakan loop bersarang.

Kapan TIDAK menggunakan pemahaman

  • Logika kompleks dengan banyak cabang if/else bersarang → gunakan loop eksplisit.
  • Efek samping (cetak, tulis file) → loop, bukan pemahaman.
  • Lebih dari 2 level bersarang → loop bernama eksplisit hampir selalu lebih baik.

Pemahaman daftar bersarang

Anda dapat merangkai beberapa loop for di dalam satu pemahaman daftar. Misalnya, untuk meratakan matriks (daftar dari daftar) menjadi satu daftar datar, Anda dapat menulis:

Python
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]

Urutan loop mencerminkan urutan bersarang dari loop for tradisional.

Cobalah

Latihan#python.m6.l1.e1
Upaya: 0Memuat…

Diberikan `angka = [1, 2, 3, 4, 5, 6]`, buatlah `kotak_genap` dengan kuadrat bilangan genap saja. Evaluasi `even_squares`.

Memuat editor…
Tunjukkan petunjuk

jika n % 2 == 0 di akhir.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#python.m6.l1.e2
Upaya: 0Memuat…

Diberikan `kata = ['Ciao', 'Mondo', 'Python', 'Java']`, buat `panjang` dengan panjang SETIAP kata, dan `kata_pendek` dengan hanya kata yang kurang dari 5 karakter. Evaluasi `(panjang, kata_pendek)`.

Memuat editor…
Tunjukkan petunjuk

Dua pemahaman terpisah.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#python.m6.l1.e3
Upaya: 0Memuat…

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.

Memuat editor…
Tunjukkan petunjuk

Gunakan range(1, 11) untuk mengulangi, jika x % 2 == 0 untuk memfilter, dan x**2 sebagai ekspresi.

Solusi tersedia setelah 3 upaya