Artikel ini bagian dari seri Belajar Python Level Basic di hanifmu.com. Di artikel sebelumnya kita sudah membahas Dictionary di Python. Sekarang kita persingkat pembuatan list yang sering ditulis dengan loop.
Membuat list dari list lain biasanya butuh beberapa baris: siapkan list kosong, loop, lalu append(). Pola ini begitu sering muncul sehingga Python menyediakan cara singkatnya, yaitu list comprehension.
Masalah yang Diselesaikan
Misalnya kamu ingin membuat list berisi kuadrat dari angka 1 sampai 5. Cara biasa:
kuadrat = []
for n in range(1, 6):
kuadrat.append(n ** 2)
print(kuadrat) # [1, 4, 9, 16, 25]
Kode ini benar, tapi tiga baris hanya untuk hal yang sederhana. Dengan list comprehension, semuanya jadi satu baris:
kuadrat = [n ** 2 for n in range(1, 6)]
print(kuadrat) # [1, 4, 9, 16, 25]
Syntax List Comprehension
Bentuk umumnya:
[ekspresi for item in iterable]
ekspresiadalah nilai yang dimasukkan ke list baru.itemadalah variabel yang berganti isi setiap putaran.iterableadalah sumber datanya, bisa list, string, ataurange().
Contoh mengubah setiap nama menjadi huruf kapital:
nama = ["budi", "sari", "anton"]
nama_kapital = [n.upper() for n in nama]
print(nama_kapital) # ['BUDI', 'SARI', 'ANTON']
Contoh mengambil panjang setiap kata:
kata = ["apel", "jeruk", "mangga"]
panjang = [len(k) for k in kata]
print(panjang) # [4, 5, 6]
Menambahkan Kondisi
List comprehension bisa menyaring item dengan if. Hanya item yang memenuhi syarat yang dimasukkan:
angka = [1, 2, 3, 4, 5, 6, 7, 8]
genap = [n for n in angka if n % 2 == 0]
print(genap) # [2, 4, 6, 8]
Kondisi diletakkan setelah for. Kamu juga bisa menggabungkan transformasi dengan penyaringan:
angka = [1, 2, 3, 4, 5, 6]
kuadrat_genap = [n ** 2 for n in angka if n % 2 == 0]
print(kuadrat_genap) # [4, 16, 36]
if dan else di Comprehension
Kalau butuh dua kemungkinan hasil, letakkan if dan else sebelum for:
angka = [1, 2, 3, 4, 5]
label = ["genap" if n % 2 == 0 else "ganjil" for n in angka]
print(label) # ['ganjil', 'genap', 'ganjil', 'genap', 'ganjil']
Perhatikan bedanya:
[n for n in angka if n % 2 == 0]menyaring item.[n if n % 2 == 0 else 0 for n in angka]mengubah semua item.
Bentuk pertama hanya memasukkan sebagian item, bentuk kedua memproses semuanya.
Nested Comprehension
List comprehension bisa memuat perulangan di dalam perulangan. Contoh membuat semua pasangan dari dua list:
warna = ["merah", "biru"]
ukuran = ["S", "M"]
pasangan = [(w, u) for w in warna for u in ukuran]
print(pasangan)
Output:
[('merah', 'S'), ('merah', 'M'), ('biru', 'S'), ('biru', 'M')]
Urutan pembacaannya seperti for bertingkat: perulangan luar dulu, lalu perulangan dalam. Comprehension juga bisa dipakai pada list berisi list:
matriks = [[1, 2], [3, 4], [5, 6]]
datar = [n for baris in matriks for n in baris]
print(datar) # [1, 2, 3, 4, 5, 6]
Kapan Sebaiknya Tidak Dipakai
List comprehension memang ringkas, tapi bukan berarti selalu lebih baik. Hindari saat:
- Logikanya sudah rumit — kondisi bertingkat membuatnya sulit dibaca.
- Ada efek samping — misalnya
print()di dalamnya; pakaiforbiasa. - Hasilnya tidak dipakai — kalau hanya ingin mengulang, gunakan
forbiasa. - Nested terlalu dalam — dua tingkat masih wajar, lebih dari itu beralih ke loop biasa.
Bandingkan dua versi berikut:
# Kurang jelas
hasil = [n ** 2 if n % 2 == 0 else n ** 3 for n in range(10) if n > 2]
# Lebih jelas
hasil = []
for n in range(10):
if n > 2:
hasil.append(n ** 2 if n % 2 == 0 else n ** 3)
Kode yang jelas lebih penting daripada kode yang pendek. Kalau comprehension mulai terasa seperti teka-teki, kembali ke loop biasa.
Contoh Program: Menyaring Nilai Lulus
Mari ambil hanya nilai yang lulus dan mengubahnya menjadi predikat:
# saring_nilai.py
nilai = [78, 55, 92, 67, 40, 88, 100]
lulus = [n for n in nilai if n >= 75]
predikat = ["A" if n >= 90 else "B" for n in lulus]
print(f"Nilai lulus: {lulus}")
print(f"Jumlah lulus: {len(lulus)}")
print(f"Predikat: {predikat}")
Output:
Nilai lulus: [78, 92, 88, 100]
Jumlah lulus: 4
Predikat: ['B', 'A', 'B', 'A']
Comprehension pertama menyaring nilai, yang kedua mengubah setiap nilai menjadi predikatnya.
Kesalahan Umum Pemula
- Tertukar posisi
if—ifdi akhir menyaring,if ... elsedi depan mengubah. - Lupa tanda kurung siku — tanda
[]yang membuatnya list. - Terlalu banyak nested — kode jadi sulit dibaca, pakai loop biasa.
- Memakai comprehension untuk efek samping — gunakan
forbiasa. - Mengubah list sumber di dalam comprehension — hindari, hasilnya membingungkan.
Ringkasan
- List comprehension membuat list baru dalam satu baris
- Bentuknya
[ekspresi for item in iterable] ifdi akhir menyaring item,if ... elsedi depan mengubah nilai- Nested comprehension setara
forbertingkat - Pakai saat logikanya sederhana, kembali ke
forbiasa saat mulai rumit
Langkah Selanjutnya
Kamu sudah mengenal empat struktur data dan cara membuatnya dengan ringkas. Bekal ini cukup untuk mengolah kumpulan data dalam jumlah besar.
Artikel selanjutnya membahas Operasi Dasar String di Python, mulai dari membuat string, mengakses karakter, sampai menggabungkannya.
