Indonesian (Bahasa Indonesia) translation by Aditia Dwiperdana (you can also view the original English article)
Fitur list comprehension menyediakan cara untuk menulis loop for
lebih jelas. Fitur ini berguna ketika kamu mau membuat list baru dari list yang sudah ada atau dari iterable. Contohnya, kamu bisa menggunakan list comprehension untuk membuat list berisi nilai kuadrat dari list berisi angka. Begitu pula kmu bisa menggunakan kondisi yang sama pada sebuah list berisi angka sedemikian sehingga list yang baru dibuat adalah subset dari list yang asli.
Perlu diketahui kamu tidak bisa menulis semua loop for
sebagai list comprehension. Satu hal lagi: nama 'list comprehension' bisa sedikit membingungkan karena seakan hanya bekerja untuk list saja. Pada kenyataannya, kata 'list' pada list comprehension digunakan untuk menunjukkan bahwa kamu bisa membuat loop untuk semua iterable dalam Python dan hasil akhirnya berupa list.
Loop dan List Comprehension
List comprehension dasar yang tidak menggunakan kondisi akan seperti berikut:
[<the_expression> for <the_element> in <the_iterable>]
Kita mulai dengan menulis loop for
sederhana untuk 15 bilangan pertama kelipatan 5. Pertama, kamu perlu buat list kosong. Lalu, kamu perlu mengiterasi sekumpulan angka dan mengalinya dengan 5. Urutan angka baru yang kamu dapat akan berisi kelipatan 5.
multiples = [] for n in range(1,16): multiples.append(n*5) print(multiples) # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]
Loop for
di atas pada dasarnya memilki struktur berikut:
for <the_element> in <the_iterable>: <the_expression>
Jika kamu bandingkan dengan list comprehension yang kamu baca sebelumnya, kamu bisa lihat bahwa <the_element>
adalah n
, <the_iterable>
adalah range(1,16)
, dan <the_expression>
adalah n*5
. Mengisi nilai-nilai ini pada list comprehension akan memiliki hasil sebagai berikut:
multiples = [n*5 for n in range(1,15)] multiples # [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70]
Begitu pula kamu bisa mendapat list dengan pangkat tiga dari sejumlah bilangan dengan cara berikut:
cubes = [n**3 for n in range(1,16)] print(cubes) #[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744, 3375]
Kondisi dalam List Comprehension
Kamu juga bisa menggunakan kondisi if
untuk mengabaikan nilai-nilai tertentu dari list akhir. Dalam kasus ini, list comprehension menerima format berikut:
[<the_expression> for <the_element> in <the_iterable> if <the_condition>]
Contoh dasar comprehension jenis ini adalah untuk mendapatkan semua bilangan genap dari sejumlah angka. Sebuah loop for
untuk melakukan tugas ini akan terlihat seperti ini:
evens = [] for n in range(1,21): if n%2 == 0: evens.append(n) print(evens) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Hal yang sama bisa juga dicapai menggunakan list comprehension berikut:
evens = [n for n in range(1,21) if n%2 == 0] print(evens) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Contoh penggunaan list comprehension yang lebih rumit adalah menambahkan ekspresi kondisional .. if .. else ..
di dalamnya.
Dalam kasus ini, urutan pernyataan dalam list comprehension akan sedikit berbeda dari kondisi if
biasa. Hanya jika jika kamu memiliki kondisi if
, kondisi tersebut masuk ke akhir dari comprehension. Tapi, dalam kasus ekspresi .. if .. else ..
, posisi loop for
dan ekspresi kondisional ditukar. Urutan barunya adalah sebagai berikut:
[<the_expression> if <the_condition> else <other_expression> for <the_element> in <the_iterable>]
Kita mulai dengan menulis ekspresi kondisional .. if .. else ..
untuk mendapat kuadrat dari nilai genap dan pangkat tiga dari nilai ganjil dari sejumlah bilangan.
squares_cubes = [] for n in range(1,16): if n%2 == 0: squares_cubes.append(n**2) else: squares_cubes.append(n**3) print(squares_cubes) # [1, 4, 27, 16, 125, 36, 343, 64, 729, 100, 1331, 144, 2197, 196, 3375]
Ekspresi kondisional di atas memilki struktur berikut:
for <the_element> in <the_iterable>: if <the_condition>: <the_expression> else: <other_expression>
Memasukkan nilai-nilai berikut di posisi yang benar akan memberimu list comprehension berikut:
squares_cubes = [n**2 if n%2 == 0 else n**3 for n in range(1,16)] print(squares_cubes) # [1, 4, 27, 16, 125, 36, 343, 64, 729, 100, 1331, 144, 2197, 196, 3375]
List Comprehension dalam Loop Bersarang
Kamu juga bisa menggunakan nested loop dalam list comprehension. TIdak ada batasan jumlah loop for
yang bisa kamu simpan di dalam list comprehension. Tapi, kamu harus ingat urutan loop harus sama di kode awal dan di list comprehension. Kamu juga bisa menambahkan kondisi if
tambahan setelah setiap loop for
. Sebuah list comprehension dengan nested loop for
akan memiliki struktur berikut:
[ <the_expression> for <element_a> in <iterable_a> (optional if <condition_a>) for <element_b> in <iterable_b> (optional if <condition_b>) for <element_c> in <iterable_c> (optional if <condition_c>) ... and so on ...]
Contoh berikut seharusnya membuat semuanya menjadi lebih jelas. Terdapat dua nested loop, dan mengalikan keduanya menghasilkan tabel perkalian.
multiplications = [] for i in range(1, 4): for n in range(1, 11): multiplications.append(i*n) print(multiplications) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
Nested loop for
tersebut bisa ditulis ulang sebagai:
for <element_a> in <iterable_a>: for <element_b> in <iterable_b>: <the_expression>
Begitu kamu membuat loop dalam format ini, mengubahnya menjadi list comprehension mudah:
multiplications = [i*n for i in range(1,4) for n in range(1,11)] print(multiplications) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
Kamu juga bisa menggunakan list comprehension yang serupa untuk meratakan list dari list. Loop for
luar mengiterasi masing-masing list dan menyimpannya dalam variabel row
. Loop for
bagian dalam akan mengiterasi semua elemen di row
saat ini. Saat iterasi pertama, variabel row
akan memiliki nilai [1, 2, 3, 4]
. Loop kedua mengiterasi ke dalam list ini atau row
, dan menambahkan semua nilai tersebut ke list akhir.
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] flatten = [n for row in matrix for n in row] print(flatten) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Nested List Comprehension
Nested list comprehension mungkin terdengar mirip dengan list comprehension dengan nested loop, tapi sebenarnya sangat bebeda. Pada kasus pertama, kamu menangani loop di dalam loop. Dalam kasus ini, kamu akan menangani list comprehension di dalam list comprehension. Contoh penggunaan nested list comprehension yang baik misalnya membuat transpose dari matriks dari bagian sebelumnya.
Tanpa ekspresi list comprehension, kamu akan perlu menggunakan dua loop for
untuk membuat transpose tersebut.
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] transpose = [] for i in range(4): temp = [] for row in matrix: temp.append(row[i]) transpose.append(temp) print(transpose) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
Loop luar mengiterasi ke dalam matriks empat kali karena ada empat kolom di dalamnya. Loop dalam mengiterasi elemen di dalam baris saat ini untuk tiap indeks dan menambahkannya ke list sementara bernama temp
. List temp
lalu ditambahkan sebagai baris di matriks yang ditranspose. Dalam kasus nested list comprehension, loop terluar ada di akhir dan loop paling dalam ada di awal.
Berikut adalah kode di atas dalam format list comprehension.
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] transpose = [[row[n] for row in matrix] for n in range(4)] print(transpose) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
Cara lain untuk melihat ini adalah dengan mempertimbangkan struktur list comprehension yang menggantikan loop for
yang kamu pelajari di awal artikel.
[<the_expression> for <the_element> in <the_iterable>]
Jika kamu bandingkan dengan nested list comprehension di atas, kamu akan lihat bahwa <the_expression>
dlaam kasus ini adalah list comprehension lain: [row[n] for row in matrix]
. Nested list comprehension ini sendiri menggunakan format loop for
dasar.
Penutup
Saya harap tutorial ini membantu kamu mengerti apa list comprehension dan bagaimana menggunakannya untuk menggantikan loop for
dasar untuk menulis kode yang lebih rapi dan sedikit lebih cepat sambil membuat list.
Hal lain yang perlu kamu ingat adalah seberapa mudah dibaca kodemu. Membuat list comprehension untuk nested loop mungkin akan membuat kode tersebut lebih sulit dibaca. Dalam kasus tersebut, kamu bisa membagi list comprehension menjadi beberapa baris untuk membuatnya lebih mudah dibaca.
Sebagai tambahan, jangan ragu melihat apa yang kita punya dan bisa kamu pelajari di Envato Market, dan jangan ragu bertanya dan memberikan masukan yang berharga menggunakan fitur komentar di bawah.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly