Hari 15: List Comprehension, Dict & Set Comprehension
60 min
Last updated 26 Mar 2026
List Comprehension
Cara ringkas dan pythonic untuk membuat list baru dari iterable.
# Sintaks: [ekspresi for item in iterable if kondisi]
# Cara lama
kuadrat = []
for n in range(1, 6):
kuadrat.append(n ** 2)
# List comprehension
kuadrat = [n**2 for n in range(1, 6)]
print(kuadrat) # [1, 4, 9, 16, 25]
# Dengan filter
genap = [n for n in range(1, 21) if n % 2 == 0]
print(genap) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# Transformasi string
kata = [" halo ", " dunia ", " python "]
bersih = [k.strip().title() for k in kata]
print(bersih) # ['Halo', 'Dunia', 'Python']
# Nested comprehension
matriks = [[1,2,3],[4,5,6],[7,8,9]]
flat = [n for baris in matriks for n in baris]
print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Dict Comprehension
# {key: value for item in iterable if kondisi}
# Kuadrat 1-5
kuadrat = {n: n**2 for n in range(1, 6)}
print(kuadrat) # {1:1, 2:4, 3:9, 4:16, 5:25}
# Balik key-value
kota_kode = {"Jakarta": "JKT", "Surabaya": "SBY", "Bandung": "BDG"}
kode_kota = {v: k for k, v in kota_kode.items()}
print(kode_kota) # {'JKT': 'Jakarta', ...}
# Filter: produk harga > 100rb
harga = {"baju":150000, "topi":75000, "tas":300000, "ikat pinggang":50000}
mahal = {k: v for k, v in harga.items() if v > 100000}
print(mahal)
Set Comprehension
# {ekspresi for item in iterable if kondisi}
angka = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unik_kuadrat = {n**2 for n in angka}
print(unik_kuadrat) # {1, 4, 9, 16} — tanpa duplikat
Generator Expression
Seperti list comprehension tapi lazy — tidak membuat list di memori, menghasilkan nilai satu per satu. Lebih hemat memori.
# Gunakan () bukan []
gen = (n**2 for n in range(1, 1_000_001))
# Tidak langsung dihitung semua
print(next(gen)) # 1
print(next(gen)) # 4
print(next(gen)) # 9
# Cocok untuk sum/max/min data besar
total = sum(n**2 for n in range(1, 1001))
print(total) # 333833500
# any() dan all() dengan generator
nilai = [80, 90, 75, 85, 70]
print(all(n >= 70 for n in nilai)) # True — semua >= 70
print(any(n >= 90 for n in nilai)) # True — ada yang >= 90Assignment
Gunakan comprehension untuk mengolah data transaksi: (1) buat list total per transaksi, (2) dict {id: total}, (3) set produk unik yang terjual, (4) filter hanya transaksi > rata-rata.
Expected output:
Totals: [8500000, 450000, 4000000, 8500000, 700000]
ID-Total: {\'\': 8500000, \'\': 450000, \'\': 4000000, \'\': 8500000, \'\': 700000}
Produk unik: {\'\', \'\', \'\', \'\'}
Di atas rata-rata (Rp 4,430,000):
T1: Laptop = Rp 8,500,000
T3: Monitor = Rp 4,000,000
T4: Laptop = Rp 8,500,000
PY
main.py
Solution
Output