Bismillaah Alhamdulillaah.
List merupakan tipe bawaan (built-in) dalam bahasa pemrograman Python yang dapat digunakan untuk menampung lebih dari satu buah data dengan tipe yang berbeda-beda. Data dalam list memiliki nomor urut (indeks) dari 0 dan seterusnya hingga sebanyak jumlah data seluruhnya dalam list tersebut.
Struktur data berupa rangkaian data atau larik (array) yang mirip dengan list adalah tuple. Kalau list isinya dapat diubah, sedangkan data dalam tuple tidak dapat diubah (immutable).
Panduan penggunaan tipe data list dapat ditelusuri di website Python. Dalam artikel ini saya akan berbagi beberapa tips dan trik penggunaan list yang dapat membantu mempercepat atau memudahkan dalam pemrosesan data lebih lanjut. Penggunaan dasar terkait list lebih lengkap dapat dicek di website lain yang akan saya cantumkan di bagian bawah artikel.
1. Membuat sebuah teks (string) dari isi list.
Isi list digabung menggunakan fungsi join string, dimana separator (pemisah) antar nilai adalah menggunakan spasi.
daftar = ['aku', 'cinta', 'indonesia']
teks = " ".join(daftar)
print(teks)
#output: "aku cinta indonesia"
2. Pemeriksaan list kosong atau tidak.
Untuk memeriksa sebuah list ada isinya atau tidak, biasanya dilakukan dengan cara memeriksa jumlah data dalam list.
len(daftar) == 0
Pernyataan di atas mengeluarkan nilai True, jika panjang atau jumlah data dalam list daftar kosong (atau tidak ada isinya). Sebaliknya, bernilai False jika ada isinya (minimal satu buah data).
Dalam python, sebuah list yang ada isinya, akan mengeluarkan nilai True jika dilakukan pembandingan dalam sebuah kondisi.
# jika ingin memeriksa apakah list daftar ada isinya
if daftar:
...
# jika ingin memeriksa apakah list daftar tidak ada isinya
if not daftar:
...
Contoh penggunaannya adalah sebagai berikut.
keranjang1 = ["jeruk", "anggur", "manggis"]
keranjang2 = []
if keranjang1:
print("Keranjang 1 ada isinya")
else:
print("Keranjang 1 kosong")
if not keranjang2:
print("Keranjang 2 kosong")
else:
print("Keranjang 2 ada isinya")
# output:
# Keranjang 1 ada isinya
# Keranjang 2 kosong
3. Menggabung isi list
Ada dua konsep dalam menggabung isi list, yaitu (1) menggabung dengan model ditumpuk,
listBenda = ["Daun", "Rambut", "Langit"]
listWarna = ["Hijau", "Hitam", "Biru"]
listGabungan = listBenda + listWarna
print(listGabungan)
#output = ['Daun', 'Rambut', 'Langit', 'Hijau', 'Hitam', 'Biru']
dan cara (2) adalah dengan menggabungkan setiap data di list A dan B secara berdampingan (per item).
Sebelum menerapkan cara kedua, yang perlu diketahui adalah terdapat fungsi bawaan bernama zip yang dapat digunakan untuk menggabung dua list secara berdampingan (per item), hanya saja bentuknya bukan list murni, melainkan object.
# hasil gabungan berupa _object_
listGabungan2 = zip(listBenda, listWarna)
# cara akses
for benda, warna in listGabungan2:
print(benda,warna)
# output:
# Daun Hijau
# Rambut Hitam
# Langit Biru
Atau dengan mengkonversi object tersebut ke bentuk list.
listGabungan3 = list(zip(listBenda, listWarna))
print(listGabungan3)
# output: [('Daun', 'Hijau'), ('Rambut', 'Hitam'), ('Langit', 'Biru')]
Biasanya untuk penggabungan model seperti ini lebih sesuai dikonversi ke bentuk kamus (dictionary).
kamus = dict(zip(listBenda, listWarna))
print(kamus)
# output: {'Daun': 'Hijau', 'Rambut': 'Hitam', 'Langit': 'Biru'}
Adapun kalau ingin dibentuk dalam format list seperti biasanya, dapat memanfaatkan list extend. Fungsi list.extend ini digunakan untuk menambah (atau menggabung) isi list dari list lain.
listGabungan4 = []
for benda, warna in zip(listBenda, listWarna):
listGabungan4.extend((benda, warna))
print(listGabungan4)
# output: ['Daun', 'Hijau', 'Rambut', 'Hitam', 'Langit', 'Biru']
4. Mengembalikan nomor indeks dari nilai yang dicari dalam list
Dalam contoh ini kita ingin mencari sebuah nilai dalam sebuah list, serta ingin mengetahui posisi indeks dari nilai tersebut jika memang ditemukan. Untuk mengembalikan nilai indeks dari suatu nilai dalam list sebenarnya sudah ada fungsinya, yaitu list index. Fungsi ini akan mengembalikan pesan kesalahan ValueError jika nilai yang dicari tidak ditemukan.
angkaAcak = [2,3,4,6,4,5,2,7,9,7,2]
angkaCari = 2
print(angkaAcak.index(angkaCari)) # output = 0
print(angkaAcak.index(10)) # output = ValueError: 10 is not in list
# mencari angka 2 mulai dari indeks ke-1
print(angkaAcak.index(angkaCari,1)) # output = 6
# mencari angka 2 mulai dari indeks ke-7
print(angkaAcak.index(angkaCari,7)) # output = 10
Solusi alternatif untuk menghindari ValueError adalah dengan melakukan pencarian secara manual melalui perulangan.
for idx,angka in enumerate(angkaAcak):
if angka == angkaCari:
print(idx)
# output:
# 0
# 6
# 10
Adapun solusi yang lebih pendek, dimana sering disebut dengan istilah list comprehension adalah sebagai berikut.
lstCari = [idx for idx,angka in enumerate(angkaAcak) if angka == angkaCari]
print(lstCari)
# output: [0, 6, 10]
5. Menghitung jumlah kemunculan dari suatu nilai
Untuk menghitung kemunculan sebuah nilai dalam sebuah list yang paling sederhana adalah dengan menggunakan fungsi list count.
angkaAcak = [2,3,4,6,4,5,2,7,9,7,2]
angkaCari = 2
jml = angkaAcak.count(angkaCari)
print(f"Angka {angkaCari} ditemukan sejumlah {jml} kali")
# output: Angka 2 ditemukan sejumlah 3 kali
Bagaimana jika pencarian nilai berdasarkan kondisi tertentu? Misal mencari nilai ganjil atau menghitung kemunculan angka ganjil. Caranya dapat menggunakan kombinasi list comprehension pada tips 4 sebelumnya.
angkaGanjil = [angka for angka in angkaAcak if angka % 2 == 1]
print(angkaGanjil) # output: [3, 5, 7, 9, 7]
print(f"Jumlah: {len(angkaGanjil)}") # output: "Jumlah: 5"
6. Menampilkan data secara unik
Dalam sebuah list dapat saja ditemukan sebuah nilai yang muncul lebih dari satu kali atau nilai kembar. Kadang-kadang kita membutuhkan nilai yang benar-benar unik, yaitu dengan cara mengeliminasi data kembarannya tersebut. Salah satu solusinya adalah dengan mengkonversi data list ke data set. Tipe data set hanya menerima sekumpulan nilai yang bersifat unik, sehingga jika ada yang kembar akan otomatis dihilangkan.
angkaAcak = [2,3,4,6,4,5,2,7,9,7,2]
angkaUnik = set(angkaAcak)
# luaran berupa tipe data set
print(angkaUnik) # output: {2, 3, 4, 5, 6, 7, 9}
# luaran hasil konversi tipe data set ke list
print(list(angkaUnik)) # output: [2, 3, 4, 5, 6, 7, 9]
7. Menampilkan isi list yang ada pada list lain
Kadang kita ingin mengetahui apakah ada isi dari sebuah list yang juga terdapat pada isi list lainnya atau istilahnya beririsan. Dalam hal ini kita manfaatkan lagi list comprehension dengan cara membandingkan isi dari masing-masing (kedua list) dalam sebuah perulangan.
barang1 = ['buku', 'pensil', 'penggaris']
barang2 = ['penghapus', 'kertas', 'buku']
barangSama = [b for b in barang1 for b2 in barang2 if b==b2]
print(barangSama) #output: ['buku']
8. Menampilkan isi dari dua list yang tidak beririsan
Tips ini kebalikan dari tips no. 7 sebelumnya. Yaitu menemukan data dalam kedua list yang tidak saling beririsan. Solusinya adalah dengan memanfaatkan fungsi symmetric difference pada tipe data set, yang berfungsi untuk mencari perbedaan nilai dari dua set yang dibandingkan.
barang1 = ['buku', 'pensil', 'penggaris']
barang2 = ['penghapus', 'kertas', 'buku']
set_barang1 = set(barang1)
set_barang2 = set(barang2)
listBarang = list(set_barang1.symmetric_difference(set_barang2))
print(listBarang)
# output: ['kertas', 'penghapus', 'penggaris', 'pensil']
9. Mengurutkan data
Pengurutan data dapat dilakukan secara ascending maupun descending. Fungsi bawaan yang tersedia adalah sorted.
angkaAcak = [2,3,4,6,4,5,2,7,9,7,2]
dataUrutAsc = sorted(angkaAcak)
dataUrutDesc = sorted(angkaAcak,reverse=True)
print(dataUrutAsc) # output: [2, 2, 2, 3, 4, 4, 5, 6, 7, 7, 9]
print(dataUrutDesc) # output: [9, 7, 7, 6, 5, 4, 4, 3, 2, 2, 2]
print(angkaAcak) # output: [2, 3, 4, 6, 4, 5, 2, 7, 9, 7, 2]
Perhatikan bahwa fungsi sorted tidak memodifikasi isi dari list yang diurutkan, sehingga isi list angkaAcak tidak berubah. Jika ingin sekaligus mengubah isi list yang dituju, maka dapat menggunakan fungsi list sort.
angkaAcak.sort()
print(angkaAcak) # output: [2, 2, 2, 3, 4, 4, 5, 6, 7, 7, 9]
Sekedar mengingatkan, konversi data list ke tipe data set selain berguna untuk mengeliminasi data kembar juga secara otomatis mengurutkan data di dalamnya.
angkaAcakDua = [2,3,4,6,4,5,2,7,9,7,2]
dataUrutUnik = list(set(angkaAcakDua))
print(dataUrutUnik) # output: [2, 3, 4, 5, 6, 7, 9]
10. Membongkar elemen list dengan *
Dalam tips ke-1 di atas, data list yang bisa diubah ke bentuk gabungan dalam sebuah string adalah isi list yang juga berupa string. Jika isi list berupa bilangan, misalnya integer, akan menyebabkan kesalahan.
angkaAcak = [2,3,4,6,4,5,2,7,9,7,2]
strAngka = " ".join(angkaAcak)
print(angkaAcak)
# TypeError: sequence item 0: expected str instance, int found
Solusinya adalah dengan menempatkan karakter * yang diletakkan sebelum list, yang digunakan untuk membongkar elemen list.
print(angkaAcak) # output: "2 3 4 6 4 5 2 7 9 7 2"
print(set(angkaAcak)) # output: "2 3 4 5 6 7 9"
Kegunaan lain tanda * dalam sebuah variable adalah menampung data list “sisa” atau dikenal dengan istilah partial assignments.
buah = ['jeruk', 'mangga', 'nanas', 'apel', 'manggis']
print(buah)
# output: "jeruk mangga nanas apel manggis"
b_satu, *b_sisa = buah
print(b_satu) # output: "jeruk"
print(b_sisa) # output: ['mangga', 'nanas', 'apel', 'manggis']
Perhatikan bahwa pada dasarnya, jika ditemukan tanda * sebelum nama variable, itu bermakna mengambil semua isi data list. Contoh pada variable *b_sisa, karena didahului dengan variable b_satu, maka b_satu hanya dialokasikan isi list pada indeks nol, dan sisa isi list dialokasikan pada variable b_sisa. Kita coba eksperimen lain sebagai berikut.
b_satu, *b_tengah, b_akhir = buah
print(b_satu) # output: "jeruk"
print(b_tengah) # output: ['mangga', 'nanas', 'apel']
print(b_akhir) # output: "manggis"
Variable b_satu dan b_akhir mendapat alokasi isi list pertama dan terakhir (satu buah nilai), sisanya diberikan pada b_tengah.
11. Mengiris (slicing) data
Slicing merupakan fitur bawaan untuk mengambil isi dalam list sesuai nomor indeks dan jumlah data yang telah ditentukan.
Berikut ini contoh slicing data dalam berbagai cara.
data = ['budi', 20, 'andi', 21, 'indah', 19, 'arman', 21]
# mengambil data pada indeks ke-0 (atau pertama)
print(data[0]) # output: budi
# indeks terakhir disimbolkan dengan angka "-1"
print(data[-1]) # output: 21
# mengambil data pertama hingga sebelum indeks ke-2
print(data[:2]) # output: ['budi', 20]
# mengambil data pada indeks -2 hingga terakhir
print(data[-2:]) # output: ['arman', 21]
# mengambil data dari indeks ke-0 hingga akhir dengan 2 langkah
# indeks: 0, 2, 4, 6
print(data[::2]) # output: ['budi', 'andi', 'indah', 'arman']
# mengambil data dari indeks ke-1 hingga akhir dengan 2 langkah
# indeks: 1, 3, 5, 7
print(data[1::2]) # output: [20, 21, 19, 21]
# mengambil data list secara terbalik
print(data[::-1])
# output: [21, 'arman', 19, 'indah', 21, 'andi', 20, 'budi']
Fungsi bawaan dari tipe data list sebenarnya cukup banyak. Beberapa website yang bisa dijadikan sumber belajar adalah Python Docs, Belajar Python, dan Jago Ngoding.
Demikian tips dan trik terkait pemanfaatan tipe data list dalam Python. Semoga bermanfaat.
Terima kasih.
Kode sumber dari tutorial ada di github repo. Cek juga versi notebook statis di Github [up-to-date], Datalore atau yang versi interaktif di MyBinder.