List Comprehension

May 21, 2019, 3:28 p.m.   afifai   Trik Python  


sample image

Bentuk Umum

Misalkan anda memiliki list yang berisi angka, lalu anda ingin menghitung pangkat 3 dari masing-masing angka yang ada pada list tersebut, bagaimana anda melakukannya ?

Dengan asumsi anda tidak dapat menggunakan library lain seperti NumPy, anda mungkin akan melakukannya dengan menggunakan looping. Sehingga kode nya adalah sebagai berikut :

>>> angka = [3, 6, 5, 4, 7, 9, 2, 8, 1]
>>> hasil = []
>>> for x in angka:
...    hit = x ** 3
...     hasil.append(hit)

Dengan mengeksekusi kode diatas, anda akan menghasilkan penghitungan pangkat 3 dari masing-masing elemen pada list angka yang disimpan di list hasil.

Tentunya anda sudah tidak asing dengan sintaks diatas bukan ? namun dapatkah anda melakukan perintah yang sama dengan kode yang lebih singkat ?

Tentu saja bisa, dengan menggunakan list comprehension yang dapat dituliskan dengan cara berikut :

angka = [3,6,5,4,7,9,2,8,1]
hasil = [x**3 for x in angka]

Apabila anda membandingkan kedua potongan kode diatas, kedua kode tersebut menghasilkan sesuatu yang sama, yaitu :

>>> hasil
[27, 216, 125, 64, 343, 729, 8, 512, 1]

Secara umum, sebenarnya dari kedua kode diatas Python melakukan hal yang sama. Anda dapat mempersingkat kode looping yang sejenis seperti contoh diatas kedalam bentuk list comprehension dengan template berikut :

hasil = [ekspresi for item in koleksi]

Template diatas ekuivalen dengan bentuk for-loop berikut :

hasil = []
for item in koleksi:
    hasil.append(ekspresi)

Dengan hasil merupakan variabel dari hasil list comprehension, ekspresi merupakan operasi yang diinginkan, item merupakan variabel iterator dan koleksi merupakan variabel bertipe data majemuk (yang dapat dilakukan for loop didalamnya).

Disini kita membuat sebuah list baru dengan nama hasil untuk menampung output-output yang dihasilkan, selanjutnya kita lakukan iterasi terhadap "benda" yang ada pada koleksi yang kita miliki, lalu mentransformasikan "benda" tersebut dengan ekspresi yang kita inginkan.

Metode ini sering disebut juga cookie-cut pattern yang mana kita dapat mentransformasikan bentuk for-loop menjadi bentuk list comprehension.

List Comprehension dengan Filtering

Kasus selanjutnya adalah kita ingin menambahkan filtering pada looping kita, sebagai contoh, kita hanya ingin menghitung pangkat 3 dari angka genap saja pada list angka. Apabila kita menggunakan for-loop biasa maka bentuknya adalah sebagai berikut :

>>> angka = [3, 6, 5, 4, 7, 9, 2, 8, 1]
>>> hasil = []
>>> for x in angka:
...    if x % 2 == 0:
...         hasil.append(x**3)

cukup panjang bukan ? apabila kita menggunakan list comprehension maka bentuknya adalah sebagai berikut :

angka = [3,6,5,4,7,9,2,8,1]
hasil = [x**3 for x in angka if x % 2 ==0]

Mari kita coba generalisasi bentuk dari list comprehension diatas

hasil = [ekspresi 
for item in koleksi
if kondisi]

bentuk diatas merupakan hasil generalisasi dari for-loop berikut

hasil = []
for item in koleksi:
    if kondisi:
            hasil.append(ekspresi)

Sejauh ini kita dapat melihat pola hubungan antara bentuk for-loop dengan bentuk list comprehension. Disini kita membuat sebuah list baru dengan nama hasil untuk menampung output-output yang dihasilkan, selanjutnya kita lakukan iterasi terhadap "benda" yang ada pada koleksi yang kita miliki, lalu mengecek apakah sesuai dengan kondisi yang kita inginkan, apabila memenuhi kita transformasikan "benda" tersebut dengan ekspresi yang kita inginkan.

Sekian tips mengenai list comprehension untuk mempersingkat beberapa baris kode for-loop yang memiliki pola diatas. Apakah anda menemukan kasus lain yang dapat ditransformasikan kedalam list comprehension ? komen dibawah ya


CARI

Afif A.I

Halo, saya Afif.
Semoga platform NgodingPython.com menjadi sarana untuk berbagi lebih luas