A.13. Python List Comprehension
List comprehension adalah metode ringkas pembuatan list (selain menggunakan literal []
atau menggunakan fungsi list()
). Cara ini lebih banyak diterapkan untuk operasi list yang menghasilkan struktur baru.
Pada chapter ini kita akan mempelajarinya.
A.13.1. Pengenalan list comprehension
Metode penulisan list comprehension membuat kode menjadi sangat ringkas, dengan konsekuensi agak sedikit membingungkan untuk yang belum terbiasa. Jadi penulis sarankan gunakan sesuai kebutuhan.
Silakan pelajari contoh berikut agar lebih mudah memahami seperti apa itu list comprehension.
◉ Contoh #1
Perulangan berikut:
seq = []
for i in range(5):
seq.append(i * 2)
print(seq)
# output ➜ [0, 2, 4, 6, 8]
... bisa dituliskan lebih ringkas menggunakan list comprehension, menjadi seperti berikut:
seq = [i * 2 for i in range(5)]
print(seq)
# output ➜ [0, 2, 4, 6, 8]
◉ Contoh #2
Perulangan berikut:
seq = []
for i in range(10):
if i % 2 == 1:
seq.append(i)
print(seq)
# output ➜ [1, 3, 5, 7, 9]
... bisa dituliskan lebih ringkas menjadi seperti berikut:
seq = [i for i in range(10) if i % 2 == 1]
print(seq)
# output ➜ [1, 3, 5, 7, 9]
◉ Contoh #3
Perulangan berikut:
seq = []
for i in range(1, 10):
if i % 2 == 0:
seq.append(i * 2)
else:
seq.append(i * 3)
print(seq)
# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]
... bisa dituliskan lebih ringkas menjadi dengan bantuan ternary menjadi seperti ini:
seq = []
for i in range(1, 10):
seq.append(i * (2 if i % 2 == 0 else 3))
print(seq)
# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]
... dan bisa dijadikan lebih ringkas lagi menggunakan list comprehension:
seq = [(i * (2 if i % 2 == 0 else 3)) for i in range(1, 10)]
print(seq)
# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]
◉ Contoh #4
Perulangan berikut:
list_x = ['a', 'b', 'c']
list_y = ['1', '2', '3']
seq = []
for x in list_x:
for y in list_y:
seq.append(x + y)
print(seq)
# output ➜ ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
... bisa dituliskan lebih ringkas menjadi seperti berikut:
seq = [x + y for x in list_x for y in list_y]
print(seq)
# output ➜ ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
◉ Contoh #5
Perulangan berikut:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = []
for i in range(4):
tr = []
for row in matrix:
tr.append(row[i])
transposed.append(tr)
print(transposed)
# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
... bisa dituliskan lebih ringkas menjadi seperti ini:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
print(transposed)
# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
... dan bisa dijadikan lebih ringkas lagi menggunakan list comprehension:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = [[row[i] for row in matrix] for i in range(4)]
print(transposed)
# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]