Learn
← Previous Next →

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 >= 90

Assignment

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