Pemrograman Python: Dari Nol sampai Proyek Mini

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 7 dari 11
  • 30 menit
  • 1 latihan kode
  • 4 soal kuis

Struktur Data: List, Tuple, Set, dan Dictionary

Di bab ini (9 bagian)
  1. Tujuan
  2. Kenapa butuh struktur data
  3. List: wadah serbaguna
  4. Tuple: list yang dikunci
  5. Set: tanpa duplikat
  6. Dictionary: pasangan kunci dan nilai
  7. Kapan memakai yang mana
  8. Kesalahan umum
  9. Rangkuman

Tujuan bab ini

  • Membedakan list, tuple, set, dan dictionary beserta sifat masing-masing.
  • Mengakses data dengan indeks, indeks negatif, slicing, dan kunci dictionary.
  • Mengolah data dengan append, remove, len, sum, list comprehension, items(), dan get().
  • Memilih struktur data yang tepat untuk sebuah kebutuhan.

Kenapa butuh struktur data

Satu variabel biasanya menyimpan satu nilai. Lalu bagaimana kalau kamu harus menyimpan nilai 30 siswa satu kelas? Membuat nilai1, nilai2, sampai nilai30 jelas melelahkan, dan kamu tidak bisa me-loop variabel seperti itu.

Struktur data adalah "wadah" untuk menyimpan banyak nilai dalam satu nama. Python punya empat wadah bawaan, dan masing-masing punya kepribadian sendiri.

Empat struktur data bawaan Python

StrukturContohBerurutanBisa diubahDuplikat
List[1, 2, 3]yayaboleh
Tuple(1, 2, 3)yatidakboleh
Set{1, 2, 3}tidakyatidak boleh
Dictionary{"a": 1}urutan masuk dijagayakunci harus unik

Sejak Python 3.7, dictionary menjaga urutan kunci sesuai urutan dimasukkan, tapi isinya tetap diakses lewat kunci, bukan nomor urut.

List: wadah serbaguna

List adalah struktur data yang paling sering kamu pakai. Analoginya seperti playlist: berurutan, bisa ditambah, dihapus, dan lagu yang sama boleh muncul dua kali.

Indeks dan indeks negatif

Setiap item punya nomor posisi yang disebut indeks, dimulai dari 0, bukan 1. Indeks negatif menghitung dari belakang: -1 adalah item terakhir.

nilai = [70, 85, 90]
nilai.append(100)   # tambah di akhir
nilai.remove(70)    # hapus item bernilai 70

print(nilai)        # [85, 90, 100]
print(nilai[0])     # 85
print(nilai[-1])    # 100
Item8590100
Indeks positif012
Indeks negatif-3-2-1

Mengakses indeks yang tidak ada, misalnya nilai[3], memicu IndexError: list index out of range.

Slicing

Slicing mengambil sebagian list dengan pola [a:b]: dari indeks a sampai b - 1, sama seperti aturan range.

huruf = ["a", "b", "c", "d", "e"]

print(huruf[0:2])   # ['a', 'b']
print(huruf[2:])    # ['c', 'd', 'e']
print(huruf[:3])    # ['a', 'b', 'c']
print(huruf[-2:])   # ['d', 'e']
print(huruf[::-1])  # ['e', 'd', 'c', 'b', 'a']

Kalau a dikosongkan berarti dari awal, kalau b dikosongkan berarti sampai akhir. Angka ketiga adalah langkah, dan [::-1] adalah trik populer untuk membalik urutan.

Fungsi dan method yang sering dipakai

nilai = [85, 90, 100]
print(len(nilai), sum(nilai))      # 3 275
print(max(nilai), min(nilai))      # 100 85
print(sum(nilai) / len(nilai))     # 91.66666666666667

len menghitung jumlah item, sum menjumlahkan, max dan min mencari nilai terbesar dan terkecil. Method lain yang berguna: insert(i, x) untuk menyisipkan, pop() untuk mengambil sekaligus menghapus item terakhir, dan sort() untuk mengurutkan.

List comprehension

List comprehension adalah cara singkat membuat list baru dari perulangan dalam satu baris.

kuadrat = [x ** 2 for x in range(5)]
print(kuadrat)   # [0, 1, 4, 9, 16]

lulus = [n for n in [55, 80, 72, 40] if n >= 70]
print(lulus)     # [80, 72]

Bacanya: "ambil x ** 2 untuk setiap x di range(5)". Versi panjangnya adalah membuat list kosong lalu append di dalam for. Hasilnya sama, tapi comprehension lebih ringkas. Bagian if di akhir berfungsi sebagai filter.

Tuple: list yang dikunci

Tuple mirip list, tapi tidak bisa diubah setelah dibuat (immutable). Cocok untuk data yang memang tidak boleh berubah, seperti koordinat atau tanggal lahir.

lokasi = (-6.2, 106.8)
print(lokasi[0])    # -6.2
lat, lon = lokasi   # unpacking

Mencoba lokasi[0] = 0 akan memicu TypeError. Sifat ini justru menguntungkan: kamu yakin datanya tidak berubah diam-diam di bagian lain program.

Set: tanpa duplikat

Set hanya menyimpan nilai unik dan tidak punya urutan, jadi tidak bisa diakses dengan indeks.

tag = ["python", "web", "python", "data"]
unik = set(tag)
print(len(unik))          # 3
print("web" in unik)      # True

Set sangat berguna untuk membuang duplikat dan mengecek keanggotaan dengan cepat. Hati-hati: {} kosong menghasilkan dictionary, bukan set. Untuk set kosong pakai set().

Dictionary: pasangan kunci dan nilai

Dictionary menyimpan data sebagai pasangan kunci: nilai, seperti kontak di HP: kamu mencari berdasarkan nama, bukan nomor urut.

siswa = {
    "nama": "Rina",
    "kelas": 11,
}
siswa["nilai"] = 92        # tambah pasangan baru
siswa["kelas"] = 12        # ubah nilai yang sudah ada

print(siswa["nama"])       # Rina

for kunci, isi in siswa.items():
    print(kunci, "=", isi)

Output loop:

nama = Rina
kelas = 12
nilai = 92

items() menghasilkan pasangan kunci dan nilai sekaligus, jadi cocok dipakai di for. Ada juga keys() untuk kunci saja dan values() untuk nilai saja.

get(): akses yang aman

Mengakses kunci yang tidak ada dengan siswa["alamat"] memicu KeyError. Method get() lebih aman karena mengembalikan None atau nilai cadangan yang kamu tentukan.

print(siswa.get("alamat"))           # None
print(siswa.get("alamat", "-"))      # -

Kapan memakai yang mana

KebutuhanPilihan
Daftar berurutan yang sering ditambah atau dihapusList
Data tetap yang tidak boleh berubahTuple
Membuang duplikat atau cek "ada atau tidak"Set
Mencari data berdasarkan nama atau labelDictionary

Di dunia nyata keempatnya sering digabung, misalnya list berisi dictionary untuk menyimpan data banyak siswa.

Kesalahan umum

  • Mengira indeks mulai dari 1. Item pertama ada di indeks 0.
  • Lupa batas slicing tidak ikut. huruf[0:2] hanya mengambil dua item.
  • Membuat set kosong dengan {}. Itu dictionary; pakai set().
  • Mengakses kunci yang tidak ada. Pakai get() bila kuncinya belum pasti ada.
  • remove untuk item yang tidak ada. Memicu ValueError; cek dulu dengan in.

Rangkuman

  • List berurutan dan bisa diubah, tuple berurutan tapi tidak bisa diubah, set tanpa duplikat dan tanpa urutan, dictionary menyimpan pasangan kunci dan nilai.
  • Indeks dimulai dari 0, indeks negatif menghitung dari belakang, dan slicing [a:b] mengambil a sampai b - 1.
  • append, remove, len, dan sum adalah alat dasar mengolah list; list comprehension membuat list baru dalam satu baris.
  • Dictionary diakses dengan kunci; items() memberi pasangan kunci dan nilai, get() mencegah KeyError.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Latihan kode (1)
  3. 3. Kuis (4 soal)

Latihan kode: Rekap nilai kelas

Lengkapi fungsi rekap(nilai). Parameter nilai adalah dictionary berisi nama siswa dan nilainya, misalnya {"Rina": 92, "Andi": 64}.

Kembalikan dictionary dengan tiga kunci:

  • "jumlah": banyaknya siswa
  • "rata_rata": rata-rata nilai, dibulatkan 1 angka di belakang koma dengan round(..., 1)
  • "lulus": list nama siswa dengan nilai minimal 70, sesuai urutan di dictionary

Petunjuk: pakai len, sum, values(), dan items() atau list comprehension.

Cek pemahaman

  1. 1Apa yang dicetak kode berikut?

    huruf = ["a", "b", "c", "d"]
    print(huruf[1:3])
  2. 2Struktur data mana yang otomatis membuang nilai duplikat?

  3. 3Isi tuple bisa diubah dengan menulis lokasi[0] = 5.

  4. 4Apa yang dicetak kode berikut?

    siswa = {"nama": "Rina", "kelas": 11}
    print(siswa.get("kota", "-"))