List Comprehension Pada Pyhton
Pada kesempatan kali ini kita akan membahas tentang list comprehension pada Python. Kalau ternary conditional operator digunakan untuk mempersingkat assignment dengan pemilihan if-else
, list comprehension ini digunakan untuk mempersingkat assignment data list dengan perulangan for
.
Mari kita bahas lebih lanjut...
Bagaimana penggunaan dan cara kerjanya? Mari kita bahas lebih lanjut…
List Comprehension pada Python
Seperti yang sudah disebutkan sebelumnya, list comprehension merupakan ternary operator pada Python yang berfungsi untuk mempersingkat proses inisialisasi variable list.
Kadang ada beberapa kasus yang mengharuskan kita mengisi elemen dari list sebelum melakukan manipulasi data. Tentu saja hal ini dapat dilakukan menggunakan perulangan for
dengan append list pada setiap iterasinya. Contohnya seperti ini:
list = []
for i in range(10):
list.append(i)
print(list)
Output:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Cara tersebut secara logika memang tidak salah, tapi… sebenarnya Python sudah punya metode yang lebih singkat dan tentunya lebih manusiawi ketimbang melakukan cara di atas. Disinilah list comprehension bersinar 😎
Kalau kalian pernah belajar tentang notasi himpunan matematika mungkin list comprehension ini sudah tidak asing lagi. Ingat cara baca ini?
Notasi tersebut dibaca:
list
merupakan himpunan bilanganx
, sedemikian hinggax
adalah bilangan bulat lebih dari atau sama dengan 0 dan kurang dari 10.
Notasi tersebut sebenarnya persis seperti kode yang telah kita buat sebelumnya. Yaitu memasukkan himpunan bilangan bulat antara 1 sampai 10 ke varaible list.
Nah loh, dari pada bingung sekarang kita balik lagi ke dunia python.
Format Penulisan List Comprehension
Karena list comprehension juga ternary operator, maka dibutuhkan 3 operand dan 2 operator.
<variable-target> = [<kembalian> for <item> in <iterable>]
variable-target
: variable untuk menampung list yang telah dibuatkembalian
: nilai yang akan dikembalikan sebagai elemen list. Dapat berupa nilai tetap, variable, maupun ekspresi untuk memproses nilaiitem
item
: penampung nilai dari iterable pada tiap iterasi, nilai ini dapat digunakan sebagai ekspresi dalam kembalianiterable
: variable yang berisi kumpulan nilai (list, string, tuple, dll)
Atau bisa juga ditambah dengan kondisi:
<variable-target> = [<kembalian> for <item> in <iterable> if <kondisi>]
Jika terdapat if statement seperti format di atas maka nilai item
hanya akan diproses ketika kondisi
bernilai True
Menggunakan List Comprehension
Pertama kita akan coba mengubah kode yang sebelumnya agar menggunakan list comprehension. Dengan logika yang sama kode tesebut dapat diubah menjadi seperti ini:
list = [i for i in range(10)]
print(list)
Output:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Nah loh.. kode yang sebelumnya terdiri dari 4 baris sekarang jadi tinggal 2 baris. Dengan menggunakan list comprehension ini, inisialisasi dan pengisian variable list dapat dilakukan sekaligus tanpa perlu menggunakan for
loop dan append
.
Apa yang sebenarnya terjadi?
Agar lebih mudah memahami cara kerjanya, kita coba bahas proses inisialisasi variable list
mulai dari kulit paling dalam hingga terluar.
for i in range(10)
: perulanganfor
biasa yang artinya kita mengambil setiap elemen dari iterable (range(10)
) dan memasukkannya ke dalam variablei
[i for i in range(10)]
: nilai yang ada di dalam variablei
menjadi ekspresi kembalian elemen list. Nantinya proses pengembalian akan dijalankan sebanyak panjang iterable sehingga didapatkan sebuah listlist = [i for i in range(10)]
: hasil dari list comprehension dimasukkan ke dalam variablelist
Sekarang kita coba ke contoh lainnya.
Membuat list angka kuadrat
Pada kasus ini kita akan membuat variable list
berisi 10 bilangan kuadrat yang pertama (mulai dari 0). Untuk melakukannya kita cukup mengubah ekspresi kembaliannya saja hingga menjadi seperti ini:
list = [i*i for i in range(10)]
print(list)
Output:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Nah… terlihat ya bagian mana yang perlu diubah. Dari yang sebelumnya kita cukup mengembalikan nilai i
, sekarang kita mengembalikan nilai i*i
sehingga didapatkan list bilangan pangkat 2.
Ingat! nilai kembalian pada list comprehension ini merupakan ekspresi. Jadi pemrosesan data apapun dapat dilakukan disana (termasuk pemanggilan fungsi dan ternary conditional operator).
Menggunakan kondisi
Sekarang kita tambah lagi kasusnya. Bagaimana cara membuat list yang berisi bilangan kuadrat dari angka genap saja. Sehingga hasil akhirnya adalah 4, 16, 36, dst.
Nah untuk melakukan ini kita dapat menggunakan blok if
seperti pada format ke-2. Nantinya akan dicek apakah nilai i
genap atau tidak. Sehingga kodenya berubah menjadi seperti ini:
list = [i*i for i in range(10) if i % 2 == 0]
print(list)
Output:
[0, 4, 16, 36, 64]
Nah pada contoh tersebut list yang dihasilkan memiliki panjang 5, tidak seperti sebelumnya yang memiliki panjang 10. Hal ini disebabkan karena ekspresi kembalian hanya akan proses jika kondisi bernilai True. Jadi ketika i
bernilai ganjil nilainya tidak akan dikembalikan.
Membuat list berisi nilai yang sama (konstan)
List comprehension ini juga dapat digunakan untuk menginisialisasi list dengan nilai yang sama pada setiap elemennya. Misal pada suatu kasus kita ingin membuat list dengan 10 elemen yang berisi nama orang yang sama. Maka hal ini dapat diselesaikan dengan kode berikut:
names = ["inva" for x in range(10)]
print(names)
Output:
['inva', 'inva', 'inva', 'inva', 'inva', 'inva', 'inva', 'inva', 'inva', 'inva']
Pada contoh tersebut variable x
tidak digunakan sama sekali dalam ekspresi kembalian. Variable x
di sini hanya berfungsi sebagai pembantu untuk melakukan iterasi.
Mengubah kalimat menjadi list karakter
Contoh terakhir. Ingat kan bahwa string pada python juga termasuk iterable? Karena termasuk iterable, string bisa juga dimanfaatkan untuk melakukan list comprehension.
Misal pada kasus ini kita diminta untuk mengambil semua karakter dari sebuah string, dan memasukkannya ke dalam list chars
. Maka kodenya akan seperti ini:
sentence = "belajar python bareng inva"
chars = [char for char in sentence]
print(chars)
Output:
['b', 'e', 'l', 'a', 'j', 'a', 'r', ' ', 'p', 'y', 't', 'h', 'o', 'n', ' ', 'b', 'a', 'r', 'e', 'n', 'g', ' ', 'i', 'n', 'v', 'a']
Sebenarnya untuk mengubah string menjadi list dapat digunakan type casting. contoh:
list(sentence)
Penutup
Cukup sekian untuk kesempatan kali ini, semoga bermanfaat 😃
Pada kesempatan selanjutnya kita akan mulai bermain dengan fungsi dan sub program pada Python 3.
See ya…👋