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.
# 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
[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
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:
[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:
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/elsebersarang → 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:
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
Diberikan `angka = [1, 2, 3, 4, 5, 6]`, buatlah `kotak_genap` dengan kuadrat bilangan genap saja. Evaluasi `even_squares`.
Tunjukkan petunjuk
jika n % 2 == 0 di akhir.
Solusi tersedia setelah 3 upaya
Tinjau latihan
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)`.
Tunjukkan petunjuk
Dua pemahaman terpisah.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
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.
Tunjukkan petunjuk
Gunakan range(1, 11) untuk mengulangi, jika x % 2 == 0 untuk memfilter, dan x**2 sebagai ekspresi.
Solusi tersedia setelah 3 upaya