Idenya
Sejauh ini setiap variabel hanya berisi satu nilai. Tapi data datang berkelompok: semua produk dalam satu kategori, setiap pesanan hari ini, pendapatan tujuh hari terakhir. List menampung banyak nilai, secara berurutan, di bawah satu nama.
cities = ["Jakarta", "Bandung", "Surabaya"]
daily_orders = [12, 9, 15, 7, 11]
print(cities)
print(len(daily_orders))
['Jakarta', 'Bandung', 'Surabaya']
5
List ditulis dengan kurung siku, dengan item dipisahkan koma. len() memberi tahu berapa item yang dimilikinya. List bisa menampung tipe apa pun, bahkan campuran, tapi dalam praktiknya list yang baik berisi satu jenis hal: semuanya harga, atau semuanya nama.
List adalah sederet loker bernomor. Setiap loker punya nomor (mulai dari 0) dan berisi satu barang. Kamu bisa membuka loker berdasarkan nomornya, menambah loker di ujung, atau mengeluarkan satu loker.
Indexing: mengambil satu item
Setiap item punya posisi, yaitu index-nya, mulai dari 0, persis seperti karakter dalam string:
cities = ["Jakarta", "Bandung", "Surabaya", "Medan"]
print(cities[0])
print(cities[2])
print(cities[-1])
print(cities[-2])
Jakarta
Surabaya
Medan
Surabaya
Index negatif menghitung dari belakang: -1 adalah item terakhir, -2 item kedua dari belakang. Minta index yang tidak ada dan Python berhenti:
print(cities[4])
IndexError: list index out of range
List berisi 4 item punya index 0 sampai 3. Kesalahan meleset satu (off-by-one) seperti ini adalah bug list yang klasik.
Slicing: mengambil rentang
Slice memberimu list baru berisi sebagian dari list asli, memakai aturan start:stop yang sama dengan yang kamu pelajari untuk string: dari start sampai, tapi tidak termasuk, stop.
revenue = [1693, 1957, 1517, 4227, 2552, 1680] # ribuan Rupiah, Jan-Jun
print(revenue[0:3]) # kuartal pertama
print(revenue[3:]) # kuartal kedua
print(revenue[-2:]) # dua bulan terakhir
print(revenue[::2]) # setiap bulan kedua
[1693, 1957, 1517]
[4227, 2552, 1680]
[2552, 1680]
[1693, 1517, 2552]
Angka ketiga yang opsional adalah step (langkah): [::2] mengambil setiap item kedua. [::-1] adalah idiom praktis yang memberikan salinan terbalik.
List bisa berubah
Inilah perbedaan besar dengan string. Daftar stok hari ini bukan sesuatu yang dibuat sekali lalu dibiarkan: barang terjual, kiriman datang, ada salah ketik yang perlu dibetulkan. Jadi berbeda dengan string, list bersifat mutable, artinya kamu bisa mengubahnya di tempat tanpa membuat list baru. Untuk mengganti satu item, beri nilai ke index-nya:
stock = [24, 12, 80]
stock[1] = 15 # ganti sebuah item
print(stock)
[24, 15, 80]
Menambah dan menghapus item
List dilengkapi method untuk menambah dan menghapus. Berbeda dengan method string, sebagian besar method ini mengubah list itu sendiri dan mengembalikan None:
basket = ["Kopi Susu", "Roti Bakar"]
basket.append("Teh Tarik") # tambah di akhir
basket.insert(0, "Air Mineral") # tambah di posisi tertentu
print(basket)
basket.remove("Roti Bakar") # hapus nilai pertama yang cocok
last = basket.pop() # hapus dan kembalikan item terakhir
print(basket, last)
['Air Mineral', 'Kopi Susu', 'Roti Bakar', 'Teh Tarik']
['Air Mineral', 'Kopi Susu'] Teh Tarik
| Method | Apa yang dilakukannya |
|---|---|
.append(x) | menambahkan x di akhir |
.insert(i, x) | menyisipkan x di index i |
.extend(other) | menambahkan setiap item dari list lain |
.remove(x) | menghapus item pertama yang sama dengan x (error kalau tidak ada) |
.pop() / .pop(i) | menghapus dan mengembalikan item terakhir, atau item di i |
Karena .append() mengubah list dan mengembalikan None, menulis basket = basket.append("Teh") mengganti list-mu dengan None. Cukup panggil basket.append("Teh") di barisnya sendiri. Ini kebalikan dari method string, di mana kamu harus menyimpan hasilnya.
Mencari
Dengan list berisi rating pelanggan, kamu pasti ingin bertanya hal seperti "ada yang memberi kita 4.8?", "berapa orang?", dan "di mana yang pertama?". Ada alat untuk setiap pertanyaan itu:
ratings = [4.6, 4.5, 4.8, 4.3, 4.8]
print(4.8 in ratings)
print(ratings.count(4.8))
print(ratings.index(4.8))
True
2
2
in bertanya apakah sebuah nilai ada di list, .count() menghitungnya, dan .index() memberikan posisi kemunculan pertama-nya.
Mengurutkan
Ada dua cara mengurutkan, dan perbedaannya penting:
prices = [95000, 65000, 110000, 55000]
cheapest_first = sorted(prices)
print(cheapest_first)
print(prices)
prices.sort(reverse=True)
print(prices)
[55000, 65000, 95000, 110000]
[95000, 65000, 110000, 55000]
[110000, 95000, 65000, 55000]
sorted(list)mengembalikan list baru yang sudah terurut dan membiarkan aslinya.list.sort()mengurutkan list di tempat dan mengembalikanNone.- Keduanya menerima
reverse=Trueuntuk urutan terbesar dulu.
Pakai sorted() kalau kamu masih butuh urutan aslinya, dan .sort() kalau tidak.
Fungsi bawaan praktis untuk list angka
List berisi angka, seperti jumlah pesanan per hari, biasanya ada supaya bisa diringkas: total seminggu, hari paling sepi, hari paling ramai, rata-ratanya. Fungsi bawaan Python menerima seluruh list dan langsung memberimu jawaban itu, tanpa perlu perulangan:
daily_orders = [12, 9, 15, 7, 11]
print(sum(daily_orders), min(daily_orders), max(daily_orders))
print(sum(daily_orders) / len(daily_orders))
54 7 15
10.8
sum(), min(), dan max() bekerja pada list angka apa pun, dan sum() / len() memberikan rata-ratanya.
List berisi list
Sebuah item bisa berupa list juga, yang memberimu tabel sederhana: list berisi baris-baris.
orders = [
["Ayu", "Jakarta", 285000],
["Budi", "Bandung", 960000],
]
print(orders[1])
print(orders[1][2])
['Budi', 'Bandung', 960000]
960000
orders[1] adalah baris kedua, dan orders[1][2] adalah item ketiga dari baris itu. Ini bisa jalan, tapi begitu kamu butuh field bernama, dictionary (segera dibahas) atau DataFrame pandas jauh lebih jelas daripada mengingat bahwa index 2 berarti "total".
Menyalin list
Memberikan list ke nama baru tidak menyalinnya. Kedua nama menunjuk ke list yang sama:
original = [1, 2, 3]
alias = original
alias.append(4)
print(original)
copy = original.copy()
copy.append(5)
print(original, copy)
[1, 2, 3, 4]
[1, 2, 3, 4] [1, 2, 3, 4, 5]
Kalau kamu ingin list yang terpisah, pakai .copy() (atau slice penuh, original[:]).
Mengapa ini penting untuk kode bersih
Beri nama list dalam bentuk jamak (cities, prices, orders) supaya cities[0] terbaca sebagai "kota pertama". Simpan satu jenis hal per list. Dan ketahui operasi mana yang mengubah list dan mana yang membuat list baru: sebagian besar bug list berasal dari mengubah list yang kamu kira salinan, atau dari menyimpan None yang dikembalikan method in-place.
Rangkuman
- List adalah kumpulan berurutan yang bisa diubah:
items = [a, b, c].len(items)menghitungnya. - Index mulai dari 0, negatif dari belakang. Index di luar jangkauan memunculkan
IndexError. - Slice
items[start:stop:step]mengembalikan list baru. .append,.insert,.extend,.remove,.popmengubah list di tempat.sorted(items)mengembalikan list baru;items.sort()mengurutkan di tempat.sum,min,max,in,.count,.indexmenjawab pertanyaan-pertanyaan umum.b = aberbagi satu list;b = a.copy()membuat list terpisah.