← Semua pembelajaran / Python Dasar
Fase 4 · Struktur Data

List — Menyimpan Banyak Nilai

Sampai sini satu variabel menyimpan satu nilai. List memecahkan masalah yang muncul begitu datamu lebih dari satu.

Sumber asli docs.python.org Resmi Rangkuman ~6 menit baca

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], bukan data[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.