List — Menyimpan Banyak Nilai
Sampai sini satu variabel menyimpan satu nilai. List memecahkan masalah yang muncul begitu datamu lebih dari satu.
Intisari
- List ditulis dengan kurung siku:
[10, 20, 30]. Isinya boleh tipe apa pun, boleh campur. - Indeks mulai dari 0. Item pertama adalah
data[0], bukandata[1]. - Indeks negatif menghitung dari belakang:
data[-1]adalah item terakhir. - Potongan (slice)
data[1:4]mengambil beberapa item sekaligus — batas akhirnya tidak ikut. - Isi list bisa diubah setelah dibuat. Ini yang membedakannya dari tuple.
Kenapa perlu list
# Tanpa list — buntu begitu jumlah datanya bertambah
nilai1 = 80
nilai2 = 95
nilai3 = 67
# Dengan list — satu nama untuk semuanya
nilai = [80, 95, 67]
Sekarang seluruh data bisa dihitung, diurutkan, dan disusuri sekaligus:
print(len(nilai)) # 3
print(sum(nilai)) # 242
print(max(nilai)) # 95
print(sum(nilai) / len(nilai)) # 80.67
Membuat list
kosong = []
angka = [1, 2, 3, 4, 5]
nama = ["Ani", "Budi", "Cici"]
campur = [1, "dua", 3.0, True] # boleh, walau jarang berguna
bersarang = [[1, 2], [3, 4]] # list di dalam list
Mengambil isi: indeks
buah = ["apel", "jeruk", "mangga", "pisang"]
# 0 1 2 3
# -4 -3 -2 -1
buah[0] # 'apel' item pertama
buah[2] # 'mangga'
buah[-1] # 'pisang' item terakhir
buah[-2] # 'mangga' kedua dari belakang
Indeks mulai dari nol. Ini sumber kebingungan klasik. Ingat begini:
indeks bukan “nomor urut”, tapi “berapa langkah dari awal”. Item pertama berjarak nol langkah.
Konsekuensinya: list berisi 4 item punya indeks 0 sampai 3, dan
buah[4] menghasilkan IndexError.
buah[4]
# IndexError: list index out of range
Indeks negatif adalah cara singkat yang sangat sering dipakai — buah[-1] jauh lebih enak dibaca daripada buah[len(buah) - 1].
Mengambil beberapa sekaligus: slice
buah = ["apel", "jeruk", "mangga", "pisang", "melon"]
buah[1:3] # ['jeruk', 'mangga'] dari 1 sampai SEBELUM 3
buah[:2] # ['apel', 'jeruk'] dari awal
buah[2:] # ['mangga', 'pisang', 'melon'] sampai akhir
buah[-2:] # ['pisang', 'melon'] dua terakhir
buah[:] # salinan seluruh list
buah[::2] # ['apel', 'mangga', 'melon'] loncat 2
buah[::-1] # list terbalik
Aturan “batas akhir tidak ikut” sama persis dengan range(). Sekali terbiasa, ini justru membantu:
buah[:2] dan buah[2:] menutupi seluruh list tanpa tumpang tindih.
Slice tidak pernah error karena kelebihan. buah[1:100] tidak membuat program mati —
ia hanya memberi apa yang ada. Berbeda dengan indeks tunggal yang langsung IndexError.
Mengubah isi
buah[0] = "apel merah"
print(buah) # ['apel merah', 'jeruk', ...]
List bisa diubah setelah dibuat (istilahnya mutable) — tidak seperti teks:
kata = "halo"
kata[0] = "H"
# TypeError: 'str' object does not support item assignment
Mencari dan mengecek
"apel" in buah # True
"durian" in buah # False
buah.index("jeruk") # 1 posisi item
buah.count("apel") # 1 berapa kali muncul
Menyusuri list
for b in buah:
print(b)
for i, b in enumerate(buah, start=1):
print(f"{i}. {b}")
Satu jebakan penting: list itu dibagi, bukan disalin
a = [1, 2, 3]
b = a # BUKAN salinan — b menunjuk list yang sama
b.append(4)
print(a) # [1, 2, 3, 4] ← a ikut berubah!
c = a[:] # ini baru salinan sungguhan
c.append(5)
print(a) # [1, 2, 3, 4] ← a aman
Nama variabel di Python adalah label yang ditempel ke sebuah nilai. b = a menempelkan
label kedua pada list yang sama, bukan membuat list baru. Untuk menyalin isinya, pakai
a[:] atau a.copy().
Latihan: buat list berisi 8 nilai ujian. Cetak nilai tertinggi, terendah, rata-rata, tiga nilai pertama, dan tiga nilai terakhir. Lalu cetak daftarnya secara terbalik.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.