List Comprehension — Python

List Comprehension List comprehension adalah cara pythonic untuk membuat list baru dari iterable yang ada — lebih ringkas daripada for loop. Sintaks Dasar #…

List comprehension adalah cara membuat list baru dari list lain dalam satu baris: tiap item diambil, boleh disaring dulu dengan if, lalu diubah jadi nilai baru. Bayangin Pak Darto mau menaikkan harga di Warung Kopi-nya. Dia ambil kertas daftar harga lama, lalu menyalin tiap harga ke kertas baru sambil menambah 2.000. Kalau dia cuma mau menu yang murah, harga yang mahal dia lewati. Kertas lamanya gak dicoret: hasilnya selalu kertas baru.

🧪 Tebakan cepat: harga = [15000, 5000, 12000], lalu print([h + 2000 for h in harga if h < 13000]). Apa yang tercetak? Tebak dulu, jawabannya ada di bagian "Menyaring dengan if".

Dari for loop ke comprehension

Dengan for loop dari pelajaran sebelumnya, menaikkan semua harga butuh empat baris:

harga = [15000, 5000, 12000]
naik = []
for h in harga:
    naik.append(h + 2000)
print(naik)   # [17000, 7000, 14000]

List comprehension menulis hal yang sama dalam satu baris:

harga = [15000, 5000, 12000]
naik = [h + 2000 for h in harga]
print(naik)    # [17000, 7000, 14000]
print(harga)   # [15000, 5000, 12000]

Menyaring dengan if

Tambahkan if kondisi di belakang untuk menyaring item:

harga = [15000, 5000, 12000]
murah = [h for h in harga if h < 13000]
print(murah)                                   # [5000, 12000]
print([h + 2000 for h in harga if h < 13000])  # [7000, 14000]
h h < 13000 Yang masuk ke list baru
15000 False dilewati
5000 True 5000 + 2000 = 7000
12000 True 12000 + 2000 = 14000

Dengan range dari pelajaran for loop, comprehension bisa membuat deret angka. range(6) adalah 0 sampai 5, dan x % 2 == 0 artinya genap:

print([x * 3 for x in range(6) if x % 2 == 0])           # [0, 6, 12]
print([x ** 2 for x in range(1, 6)])                     # [1, 4, 9, 16, 25]

Mengubah teks

pesanan = ["kopi susu", "teh manis", "roti bakar"]

print([m.upper() for m in pesanan])           # ['KOPI SUSU', 'TEH MANIS', 'ROTI BAKAR']
print([len(m) for m in pesanan])              # [9, 9, 10]
print([m.upper() for m in pesanan if "a" in m])   # ['TEH MANIS', 'ROTI BAKAR']

📌 Memilih nilai dengan if-else

if di belakang menyaring. Kalau kamu mau semua item tetap masuk, tapi nilainya dipilih, tulis if ... else di depan, sebagai bagian dari ekspresi:

harga = [15000, 5000, 12000]
label = ["murah" if h < 10000 else "mahal" for h in harga]
print(label)   # ['mahal', 'murah', 'mahal']

Posisinya menentukan artinya. else di belakang ditolak, dan Python gak menjalankan satu baris pun:

  File "/home/darto/warung.py", line 2
    hasil = [h for h in harga if h < 10000 else 0]
                                           ^^^^
SyntaxError: invalid syntax

📌 Dictionary comprehension

Dengan kurung kurawal dan key: value, hasilnya dictionary:

pesanan = ["kopi susu", "teh manis", "roti bakar"]
print({m: len(m) for m in pesanan})   # {'kopi susu': 9, 'teh manis': 9, 'roti bakar': 10}

Kurung kurawal tanpa titik dua, seperti {h // 1000 for h in harga}, membuat set.

⚠️ Jebakan yang sering ketemu

TL;DR: List comprehension [ekspresi for item in iterable] membuat list baru dalam satu baris dan gak mengubah list aslinya: [h + 2000 for h in harga]. Tambahkan if kondisi di belakang untuk menyaring: item yang False dilewati, jadi [h + 2000 for h in harga if h < 13000] adalah [7000, 14000] dan [x * 3 for x in range(6) if x % 2 == 0] adalah [0, 6, 12]. Ekspresinya boleh method: [m.upper() for m in pesanan] membuat semua nama jadi huruf kapital. Untuk memilih nilai, if ... else ditulis di depan for; else di belakang adalah SyntaxError. Kurung kurawal dengan key: value membuat dictionary.

Yang akan kamu pelajari