Comprehension: List, Dict & Set
Membuat koleksi baru dalam satu baris yang ringkas dan mudah dibaca.
List comprehension
Pola: [ekspresi for item in sumber if syarat].
Cara biasa:
kuadrat = []
for n in range(1, 6):
kuadrat.append(n * n)
Dengan comprehension:
kuadrat = [n * n for n in range(1, 6)] # [1, 4, 9, 16, 25]
Dengan filter
genap = [n for n in range(10) if n % 2 == 0] # [0, 2, 4, 6, 8]
kapital = [k.upper() for k in ["a", "b"]] # ['A', 'B']
panjang = [len(k) for k in ["apel", "kiwi"]] # [4, 4]
if-else di ekspresi
if/else sebagai bagian ekspresi ditulis di depan for:
label = ["genap" if n % 2 == 0 else "ganjil" for n in range(4)]
# ['genap', 'ganjil', 'genap', 'ganjil']
Sedangkan if saja (sebagai filter) ditulis di belakang.
Loop bersarang
pasangan = [(x, y) for x in [1, 2] for y in ["a", "b"]]
# [(1,'a'), (1,'b'), (2,'a'), (2,'b')]
rata = [n for baris in [[1, 2], [3, 4]] for n in baris] # meratakan: [1, 2, 3, 4]
Lebih dari dua tingkat biasanya tidak terbaca; gunakan loop biasa.
Dict comprehension
kata = ["apel", "kiwi", "jeruk"]
panjang = {k: len(k) for k in kata} # {'apel': 4, 'kiwi': 4, 'jeruk': 5}
terbalik = {v: k for k, v in panjang.items()}
Set comprehension
huruf = {c for c in "banana"} # {'b', 'a', 'n'}
Generator expression
Dengan kurung biasa, hasilnya dihitung malas (satu per satu) sehingga hemat memori:
total = sum(n * n for n in range(1_000_000))
Kapan sebaiknya tidak dipakai?
- Jika butuh banyak logika atau efek samping (print, simpan file): pakai
forbiasa. - Jika sulit dibaca dalam satu tarikan napas: pecah.
Aturan praktis: comprehension untuk membangun koleksi, loop untuk melakukan tindakan.