List — Python

List di Python List adalah struktur data ordered, mutable yang bisa menyimpan berbagai tipe data. Membuat List buah = ["apel", "jeruk", "mangga"] angka = [1…

List adalah daftar nilai yang berurutan, disimpan dalam satu variabel. Bayangin tali jepitan nota di dapur Warung Kopi Pak Darto. Tiap pesanan ditulis di kertas, lalu dijepit berjajar di tali itu. Jepitan paling kiri nomor 0, sebelahnya nomor 1, dan seterusnya. Pak Darto bisa menjepit nota baru di ujung, mencabut nota terakhir, atau menyusun ulang urutannya. Talinya tetap satu, isinya yang berubah. Beda dengan papan menu di pelajaran string, yang ubinnya ditempel mati.

🧪 Tebakan cepat: a = ["kopi susu", "teh manis"], lalu b = a, lalu a.append("roti bakar"), lalu print(b). Yang tercetak 2 item atau 3 item? Tebak dulu, jawabannya ada di bagian "Dua nama, satu list".

Membuat list

pesanan = ["kopi susu", "teh manis", "roti bakar"]
harga = [15000, 5000, 12000]
kosong = []

print(pesanan)        # ['kopi susu', 'teh manis', 'roti bakar']
print(len(pesanan))   # 3
print("teh manis" in pesanan)   # True

Indeks dan indeks negatif

Sama seperti karakter di string, tiap item punya nomor posisi, disebut indeks:

Item kopi susu teh manis roti bakar
Indeks 0 1 2
Indeks negatif -3 -2 -1
Traceback (most recent call last):
  File "/home/darto/warung.py", line 2, in <module>
    print(pesanan[3])
          ~~~~~~~^^^
IndexError: list index out of range

Tanda ~~~~~~~ menunjuk list-nya, ^^^ menunjuk indeks yang salah. List ini cuma punya indeks 0 sampai 2 (atau -1 sampai -3), jadi pesanan[3] dan pesanan[-4] sama-sama IndexError.

Mengubah isi list

List itu mutable: isinya bisa diubah tanpa membuat list baru. Ganti satu item lewat indeksnya, pesanan[1] = "es teh", dan list-nya langsung jadi ['kopi susu', 'es teh', 'roti bakar']. Selain itu ada method-method ini:

pesanan = ["kopi susu", "teh manis", "roti bakar"]
pesanan.append("es jeruk")       # tambah di ujung
pesanan.insert(0, "air putih")   # sisipkan di indeks 0
pesanan.pop()                    # cabut item terakhir
pesanan.remove("teh manis")      # buang berdasarkan isinya
print(pesanan)                   # ['air putih', 'kopi susu', 'roti bakar']
Baris Isi pesanan sesudahnya
append("es jeruk") ['kopi susu', 'teh manis', 'roti bakar', 'es jeruk']
insert(0, "air putih") ['air putih', 'kopi susu', 'teh manis', 'roti bakar', 'es jeruk']
pop() ['air putih', 'kopi susu', 'teh manis', 'roti bakar']
remove("teh manis") ['air putih', 'kopi susu', 'roti bakar']

Untuk mengurutkan ada dua cara:

harga = [15000, 5000, 12000]
print(sorted(harga))   # [5000, 12000, 15000]
print(harga)           # [15000, 5000, 12000], gak berubah

harga.sort()
print(harga)           # [5000, 12000, 15000]

Slicing: memotong list

pesanan = ["kopi susu", "teh manis", "roti bakar", "es jeruk", "air putih"]

print(pesanan[:3])    # ['kopi susu', 'teh manis', 'roti bakar']
print(pesanan[1:3])   # ['teh manis', 'roti bakar']
print(pesanan[-2:])   # ['es jeruk', 'air putih']
print(pesanan[::2])   # ['kopi susu', 'roti bakar', 'air putih']
print(pesanan[::-1])  # ['air putih', 'es jeruk', 'roti bakar', 'teh manis', 'kopi susu']

Dua nama, satu list

Ingat pelajaran variabel: nama itu label yang ditempel ke nilai. b = a gak menyalin list, tapi menempel label kedua ke list yang sama:

a = ["kopi susu", "teh manis"]
b = a
a.append("roti bakar")
print(b)   # ['kopi susu', 'teh manis', 'roti bakar']

a dan b itu satu tali jepitan dengan dua label. Jepit nota lewat a, dan b ikut melihatnya. Jadi yang tercetak 3 item. Itu jawaban tebakannya.

Mau salinan yang terpisah? Pakai .copy() atau slicing penuh a[:]:

a = ["kopi susu", "teh manis"]
b = a.copy()
a.append("roti bakar")
print(a)   # ['kopi susu', 'teh manis', 'roti bakar']
print(b)   # ['kopi susu', 'teh manis']

Hal yang sama terjadi saat list dikirim ke fungsi: parameternya cuma label lain untuk list yang sama. Kalau fungsi memanggil items.append("bonus"), list milik pemanggilnya ikut bertambah.

⚠️ Jebakan yang sering ketemu

TL;DR: List adalah daftar berurutan di dalam [ ], len() menghitung itemnya, dan in mengecek isinya. Indeks mulai dari 0, indeks negatif dari belakang (angka[-2] item kedua dari belakang), dan indeks di luar batas jadi IndexError: list index out of range. List mutable: .append(x) menambah di ujung, .insert(i, x) menyisipkan, .pop() mencabut yang terakhir, .remove(x) membuang berdasarkan isi, .sort() mengurutkan di tempat dan mengembalikan None, sedangkan sorted() membuat list baru. Slicing [awal:akhir:langkah] berhenti sebelum akhir dan selalu membuat list baru: data[:3] adalah tiga item pertama. b = a menempel label kedua ke list yang sama, jadi salin dengan .copy() atau [:].

Yang akan kamu pelajari