List Comprehension Pada Pyhton

baca 4 menit
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:

python
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?

list=x0x<10,xZlist = {x | 0 \le x \lt 10, x \in \Z }

Notasi tersebut dibaca: list merupakan himpunan bilangan x, sedemikian hingga x 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 dibuat
  • kembalian: nilai yang akan dikembalikan sebagai elemen list. Dapat berupa nilai tetap, variable, maupun ekspresi untuk memproses nilai item
  • item: penampung nilai dari iterable pada tiap iterasi, nilai ini dapat digunakan sebagai ekspresi dalam kembalian
  • iterable: 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:

python
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.

  1. for i in range(10): perulangan for biasa yang artinya kita mengambil setiap elemen dari iterable (range(10)) dan memasukkannya ke dalam variable i
  2. [i for i in range(10)]: nilai yang ada di dalam variable i menjadi ekspresi kembalian elemen list. Nantinya proses pengembalian akan dijalankan sebanyak panjang iterable sehingga didapatkan sebuah list
  3. list = [i for i in range(10)]: hasil dari list comprehension dimasukkan ke dalam variable list

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:

python
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:

python
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:

python
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…👋