Struktur Data Koleksi (List, Tuple, Set, Dict)
Manipulasi mutable List (indexing, slicing, methods), immutable Tuple, himpunan unik Set, key-value mapping Dictionary, dan List Comprehension.
- Memahami tabel perbandingan karakteristik 4 struktur data Python.
- Mengetahui perbedaan kritis antara Copy by Reference (Alias) dan Clone/Shallow Copy.
- Menguasai operasi CRUD, Method bawaan, dan List/Dict Comprehension.
- Memilih struktur data yang paling tepat dan efisien (Big-O Complexity).
1. Tabel Ringkasan & Perbandingan 4 Koleksi
| Koleksi | Sintaks | Terurut (Ordered)? | Bisa Diubah (Mutable)? | Izin Duplikasi? | Kasus Penggunaan Ideal |
|---|---|---|---|---|---|
| List | [1, 2, 3] | ✔️ Ya | ✔️ Ya | ✔️ Ya | Daftar item dinamis yang sering ditambah/dihapus/diurutkan |
| Tuple | (1, 2, 3) | ✔️ Ya | ❌ Tidak (Konstan) | ✔️ Ya | Data konstan (koordinat, setting port, return multiple values) |
| Set | {1, 2, 3} | ❌ Tidak | ✔️ Ya | ❌ Tidak (Otomatis Unik) | Eliminasi data ganda & operasi himpunan (irisan/gabungan) |
| Dictionary | {"a": 1} | ✔️ Ya (sejak Python 3.7) | ✔️ Ya | ❌ Key Unik (Value boleh sama) | Entitas data terstruktur (Record database, JSON payload) |
2. Jebakan Kritis: Reference (Alias) vs Copy
Di Python, menulis list_b = list_a TIDAK menduplikasi data, melainkan hanya membuat dua variabel yang menunjuk ke alamat memori list yang sama!
# ❌ SALAH: Menyalin dengan operator '=' (Kedua list saling terikat)
a = [1, 2, 3]
b = a
b.append(99)
print("a:", a) # a ikut berubah menjadi [1, 2, 3, 99]!
# ✔️ BENAR: Menggunakan method .copy() atau slicing [:]
x = [1, 2, 3]
y = x.copy() # atau y = x[:]
y.append(99)
print("x:", x) # x tetap aman [1, 2, 3]
print("y:", y) # y menjadi [1, 2, 3, 99]
3. List & Dictionary Comprehension (Teknik Pythonic)
Comprehension adalah cara ringkas dan sangat cepat untuk membuat koleksi baru berdasarkan iterasi koleksi yang sudah ada.
# 1. List Comprehension: Filter dan Transformasi dalam 1 baris
angka = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
kuadrat_genap = [x**2 for x in angka if x % 2 == 0]
print("Kuadrat Genap:", kuadrat_genap) # [4, 16, 36, 64, 100]
# 2. Dict Comprehension: Mengubah format Dictionary
harga_usd = {"laptop": 800, "mouse": 25, "keyboard": 60}
kurs_idr = 16000
harga_idr = {item: harga * kurs_idr for item, harga in harga_usd.items()}
print("Harga IDR:", harga_idr)
4. Kuis Pemahaman & Latihan
s = {1, 1.0, "1", True}
print(len(s))
Klik untuk melihat jawaban & pembahasan
2
Penjelasan: Di Python,
1 == 1.0 == True bernilai sama dan memiliki nilai hash yang sama. Sehingga 1, 1.0, dan True dianggap sebagai satu elemen duplikat yang sama. Elemen uniknya hanya ada 2 yaitu 1 (atau True) dan string "1".
Tantangan 6: Penghitung Frekuensi Kata (Word Counter)
Diberikan sebuah paragraf: teks = "python adalah bahasa yang mudah python sangat populer python bagus".
Gunakan Dictionary untuk menghitung berapa kali setiap kata muncul di dalam kalimat tersebut!
teks.split(), lalu lakukan iterasi untuk menambahkan count ke dictionary dengan counts[kata] = counts.get(kata, 0) + 1.
| Sintaks / Perintah | Keterangan Fungsi |
|---|---|
[item1, item2] |
List: Berurutan, mutable (bisa diubah), indeks dari 0 |
(item1, item2) |
Tuple: Berurutan, immutable (permanen tidak bisa diubah) |
{"kunci": "nilai"} |
Dictionary: Pasangan key-value cepat berbasis hash map |
{item1, item2} |
Set: Kumpulan elemen unik tanpa duplikasi data |
[x * 2 for x in data] |
List Comprehension: Pembuatan list baru secara deklaratif & efisien |
dict.get(key, default) |
Mengambil nilai dict dengan proteksi nilai default jika kunci tidak ditemukan |
Jobsheet 03: Struktur Data Terstruktur & CRUD
Kembangkan program manajemen data nilai siswa dengan operasi CRUD (Create, Read, Update, Delete) lengkap.
Mengakses indeks di luar jangkauan list atau memanggil kunci dictionary yang belum ada langsung menyebabkan aplikasi berhenti seketika.
# IndexError: list index out of range
skor = [80, 90, 75]
print(skor[3]) # Error: indeks hanya 0, 1, 2
# KeyError: 'email'
siswa = {"nama": "Ali", "kelas": "X"}
print(siswa["email"]) # Crash jika kunci tidak ada
# Solusi Benar:
skor = [80, 90, 75]
if len(skor) > 3:
print(skor[3])
siswa = {"nama": "Ali", "kelas": "X"}
print(siswa.get("email", "Belum terdaftar")) # 100% aman
.get(kunci, nilai_default) untuk menghindari crash akibat KeyError.
Manfaatkan list comprehension untuk transformasi data dan metode .get() untuk mengakses nilai kamus dengan aman.
# Kurang Pythonic (Loop manual append & pengecekan key manual)
angka = [1, 2, 3, 4, 5]
kuadrat = []
for x in angka:
if x % 2 == 0:
kuadrat.append(x ** 2)
profil = {"nama": "Rian"}
if "kota" in profil:
asal = profil["kota"]
else:
asal = "Belum diisi"
# Pythonic (List Comprehension & Dict .get() default)
angka = [1, 2, 3, 4, 5]
kuadrat = [x ** 2 for x in angka if x % 2 == 0]
profil = {"nama": "Rian"}
asal = profil.get("kota", "Belum diisi")
.get(kunci, nilai_default) mencegah terjadinya KeyError tanpa memerlukan blok if-else tambahan.
Cek Pemahaman Mandiri
Uji pemahaman Anda terhadap konsep bab ini dengan feedback evaluasi instan.
Manakah struktur data bawaan Python berikut yang bersifat Immutable (nilainya terkunci dan tidak dapat diubah setelah dibuat)?
💡 Pembahasan: Tuple bersifat immutable (read-only). Anda tidak dapat menambah, menghapus, atau mengubah elemen tuple setelah inisialisasi.
Bagaimana cara mengambil nilai dari dictionary profil = {"nama": "Rian"} secara aman tanpa memicu KeyError jika kuncinya tidak ada?
💡 Pembahasan: Metode .get(key, default) mengambil nilai secara aman. Jika kunci tidak ditemukan, metode ini mengembalikan nilai default tanpa menimbulkan crash KeyError.