Belajar dengan membaca secara berurutan

List Comprehension dan Dict / Set / Generator Expression — Bangun Koleksi dalam Satu Baris

Pelajari comprehension Python untuk membangun list, dict, dan set hanya dalam satu baris.

Di artikel sebelumnya tentang all() / any(), kamu sudah melihat cara menilai seluruh koleksi sekaligus. Kali ini, kamu akan melangkah lebih jauh dan melihat sintaks ampuh untuk membangun koleksi itu sendiri dalam satu bariscomprehension.

Kita mulai dari list comprehension, menambahkan filter dengan if, melihat varian dict dan set, dan menutup dengan generator expression yang hemat memori.

Dasar List Comprehension — Padatkan Loop for ke Satu Baris

Python punya sintaks satu baris untuk membangun list: [ekspresi for variabel in iterable]. Ini disebut list comprehension.

Ini adalah shortcut untuk pola loop for yang dimulai dengan list kosong dan memanggil append() berulang kali, dan ia bersinar ketika kamu ingin menerapkan transformasi yang sama ke setiap elemen dan menghasilkan list baru.

Bagaimana list comprehension mengalir
items =[10, 20, 30][x * 2for x in items][20, 40, 60]ke tiap elemenlist baru

[ekspresi for variabel in iterable] menghasilkan list baru dengan setiap elemen ditransformasikan oleh ekspresi. Ini adalah versi satu baris dari menulis loop for dengan append.

# Memakai loop for
result = []
for price in [100, 250, 480]:
    result.append(int(price * 1.1))
print(result)   # [110, 275, 528]

# Hal yang sama sebagai list comprehension
prices = [100, 250, 480]
tax_included = [int(p * 1.1) for p in prices]
print(tax_included)   # [110, 275, 528]

# Mengumpulkan panjang string juga dalam satu baris
names = ["Alice", "Bob", "Charlotte"]
lengths = [len(n) for n in names]
print(lengths)   # [5, 3, 9]

Bangun list baru harga produk dengan pajak 10% ditambahkan, menggunakan list comprehension.

① Deklarasikan prices = [100, 250, 480, 1200].

② Gunakan list comprehension [int(p * 1.1) for p in prices] untuk membangun list yang sudah termasuk pajak dan assign ke tax_included.

③ Cetak hasilnya dengan print(tax_included).

(Saat jawaban benar, penjelasan akan muncul.)

Python Editor

Jalankan kode untuk melihat output

Memfilter dengan if — Comprehension Bersyarat

Tambahkan if kondisi setelah for dan hanya elemen yang memenuhi kondisi yang masuk ke list baru. Bentuknya adalah [ekspresi for variabel in iterable if kondisi].

Menulis transformasi dan filter pada baris yang sama adalah hal yang membuat list comprehension ringkas — menarik keluar "hanya elemen yang cocok" menjadi satu baris pendek dan mudah dibaca.

Bagaimana comprehension bersyarat menilai setiap elemen
di dalam forprices =[80, 250, 120, 480][p for p in pricesif p >= 200]Hasil[250, 480]p = 8080 >= 200False→ lewatip = 250250 >= 200True→ simpanp = 120120 >= 200False→ lewatip = 480480 >= 200True→ simpanterapkanselesai
Setiap elemen diambil berurutan dan dinilai dengan if p >= 200 satu per satu. Elemen True (disimpan) berakhir di list baru; elemen False (dilewati) dibuang.
# Tarik hanya item >= 200
prices = [80, 250, 120, 480, 95]
premium = [p for p in prices if p >= 200]
print(premium)         # [250, 480]

# Filter dan transformasi sekaligus
discounted = [int(p * 0.9) for p in prices if p >= 200]
print(discounted)      # [225, 432]   ← diskon 10%, hanya item >= 200

# Filter dan transformasi pada string
names = ["Alice", "Bob", "Charlotte", "Ed"]
long_names = [n.upper() for n in names if len(n) >= 5]
print(long_names)      # ['ALICE', 'CHARLOTTE']

Dari data inventaris, tarik nama produk dengan stok 1 atau lebih.

① Deklarasikan stocks = [("apel", 12), ("pisang", 0), ("jeruk", 5), ("anggur", 0), ("kiwi", 3)].

② Gunakan [name for name, count in stocks if count > 0] untuk membangun list nama produk yang tersedia dan assign ke available (tuple unpacking memungkinkan kamu mengikat name dan count sekaligus).

③ Cetak hasilnya dengan print(available).

Python Editor

Jalankan kode untuk melihat output

Dict Comprehension dan Set Comprehension

Tukar tanda kurung siku [ ] dari list comprehension dengan kurung kurawal { } dan kamu mendapatkan set comprehension.

Selangkah lebih jauh dengan {key: value for ...} dan titik dua mengubahnya menjadi dict comprehension. Sintaks for ... in ... identik — hanya bentuk koleksi outputnya yang berubah, dan fleksibilitas itulah yang membuat comprehension begitu praktis.

Bagaimana dict comprehension mengalir
pairs =[("apel", 120), ("jeruk", 80)]{name: pricefor name, pricein pairs}{"apel": 120, "jeruk": 80}unpackdict baru

{key: value for ...} membangun dict berisi pasangan. Dari list tuple (name, price) kamu bisa membangun lookup "name → price" dalam satu baris.

# Dict comprehension: bangun lookup name → price
pairs = [("apel", 120), ("jeruk", 80), ("pisang", 60)]
price_lookup = {name: price for name, price in pairs}
print(price_lookup)
# {'apel': 120, 'jeruk': 80, 'pisang': 60}

# Bangun ulang dict dengan harga termasuk pajak
tax_included = {name: int(price * 1.1) for name, price in pairs}
print(tax_included)
# {'apel': 132, 'jeruk': 88, 'pisang': 66}

# Set comprehension: tarik tag unik (tanpa duplikat)
tags = ["sale", "new", "sale", "limited", "new"]
unique = {t for t in tags}
print(unique)   # {'sale', 'new', 'limited'} (urutan tergantung implementasi)

Pasangkan zip() dengan dict comprehension

Saat kamu punya dua list paralel seperti names dan prices dan ingin sebuah dict, {n: p for n, p in zip(names, prices)} sangat cocok. zip() berjalan menyusuri list secara paralel sehingga kamu bisa membangun key dan value pada saat yang sama.

Dari list tuple (name, price), bangun dict produk → harga termasuk pajak dalam satu baris.

① Deklarasikan pairs = [("apel", 120), ("jeruk", 80), ("pisang", 60), ("kiwi", 200)].

② Gunakan dict comprehension {name: int(price * 1.1) for name, price in pairs} untuk membangun lookup yang termasuk pajak dan assign ke tax_lookup.

③ Cetak hasilnya dengan print(tax_lookup).

Python Editor

Jalankan kode untuk melihat output

Generator Expression — Tukar Kurung Siku dengan Kurung Biasa

Tukar tanda kurung siku [ ] dari list comprehension dengan tanda kurung ( ) dan kamu punya generator expression. Tidak seperti list, ia tidak memuat semua elemen di memori — ia menghitung hanya yang kamu butuhkan, ketika kamu butuhkan (lazy evaluation).

Kamu bisa meneruskannya langsung ke sum() / max() / min() / any() dan seterusnya, yang menjaga penggunaan memori tetap rendah saat mengagregasi data besar. Pendalaman lengkapnya ada di artikel generator function nanti.

SintaksTipe hasilKarakteristik
[x for x in items]listMenyimpan semua item di memori
{x for x in items}setTanpa duplikat, semua di memori
{k: v for k, v in items}dictPasangan key: value, semua di memori
(x for x in items)generatorHanya item saat ini, lazy
# Tanda kurung membuat generator expression
prices = [100, 250, 480, 1200]
gen = (int(p * 1.1) for p in prices)
print(type(gen))   # <class 'generator'>

# Teruskan langsung ke sum() (kurung luar bisa dihilangkan)
total_tax = sum(int(p * 1.1) for p in prices)
print(total_tax)   # 2233

# Trik yang sama dengan max() / min()
max_tax = max(int(p * 1.1) for p in prices)
print(max_tax)     # 1320

Pilih sesuai kasus penggunaan: "semua sekaligus?" atau "satu per satu?"

Jika kamu ingin seluruhnya sebagai list di tanganmu, gunakan [ ] (list comprehension). Jika kamu hanya meneruskannya ke sum() / max() untuk mengagregasi, ( ) (generator expression) adalah pilihan yang lebih ramah memori. Pada skala satu juta elemen, perbedaannya dramatis — generator expression hanya menggunakan beberapa ratus byte saja.

Untuk list harga produk, hitung total harga termasuk pajak dengan menggabungkan generator expression dengan sum().

① Deklarasikan prices = [100, 250, 480, 1200].

② Hitung total termasuk pajak dengan sum(int(p * 1.1) for p in prices) dan assign ke total (kamu bisa langsung menaruh generator expression di dalam kurung sum()).

③ Cetak hasilnya dengan print(total).

Python Editor

Jalankan kode untuk melihat output
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa yang dicetak kode ini?
nums = [1, 2, 3, 4]
result = [n * 10 for n in nums]
print(result)

Soal 2Apa yang dicetak kode ini?
nums = [1, 2, 3, 4, 5]
result = [n for n in nums if n % 2 == 0]
print(result)

Soal 3Mana di antara berikut yang membuat dict?