Kemarin kita belajar mengontrol alur cerita program dengan if, for, dan while. Kita sudah bisa membuat keputusan dan perulangan. Tapi bayangkan kalau kita harus menyimpan nilai 40 siswa, nama-nama buah-buahan, atau daftar tugas yang harus dikerjakan besok. Akan capek kan kalau harus bikin variabel nilai_siswa_1, nilai_siswa_2, sampai nilai_siswa_40?
💡 Cerita dari kelas: Dulu saya punya siswa yang bikin program kasir. Dia bikin variabel
harga_barang_1,harga_barang_2, … sampaiharga_barang_20. Waktu di-suruh nambah fitur “hapus barang”, dia nangis di depan laptop. Jangan jadi dia ya.
Kali ini kita bahas Koleksi Data — wadah yang bisa menampung banyak data sekaligus. Di Python ada empat yang paling sering dipakai: List, Tuple, Set, dan Dictionary. Anggap saja ini seperti kotak-kotak di meja kerja Anda. Bedanya: ada yang bisa diubah isinya, ada yang nggak, ada yang urut, ada yang acak, dan ada yang pakai label.
1. List: Rak Buku yang Bisa Diubah-Ubah
List itu urut, bisa duplikat, dan bisa diubah (mutable). Anggap seperti rak buku di perpustakaan sekolah. Bisa ditambah buku baru, dibuang yang rusak, ditukar posisinya.
# list_dasar.py
# Membuat list
daftar_belanja = ["Beras", "Minyak", "Telur", "Gula"]
nilai_kelas = [85, 90, 78, 92, 88] # Bisa campur tapi lebih baik jangan
campuran = ["Rifqi", 25, True, 175.5] # Boleh, tapi jarang dipakai di dunia nyata
# Mengakses elemen (Index dimulai dari 0!)
print("Barang pertama:", daftar_belanja[0]) # Beras
print("Barang terakhir:", daftar_belanja[-1]) # Gula (index negatif = mundur dari belakang)
# Menambah & Menghapus
daftar_belanja.append("Kopi") # Tambah di akhir
daftar_belanja.insert(1, "Susu") # Sisipkan di index 1
print("Setelah belanja tambahan:", daftar_belanja)
daftar_belanja.remove("Telur") # Hapus berdasarkan nilai
item_dihapus = daftar_belanja.pop(0) # Hapus berdasarkan index & ambil nilainya
print(f"Item '{item_dihapus}' sudah dibeli, sisanya: {daftar_belanja}")
# Potong (Slicing) — ambil sebagian
print("Belanjaan minggu ini:", daftar_belanja[1:3]) # Index 1 sampai sebelum 3Penjelasan:
Kode di atas menunjukkan siklus hidup List: buat → baca → ubah → hapus. Perhatikan append() vs insert(), dan remove() vs pop(). pop() itu berguna kalau Anda butuh nilai yang dihapus tadi (misal: sistem undo).
⚠️ Peringatan:
remove()hapus yang pertama ketemu kalau ada duplikat.pop()但如果 index-nya melebihi panjang list, program crash (IndexError). Selalu cek panjang dulu pakailen(daftar_belanja).
2. Tuple: Arsip yang Terkunci
Tuple mirip List: urut, boleh duplikat. Tapi tidak bisa diubah (immutable). Sekali dibuat, isinya tetap sampai program selesai. Cocok untuk data yang harus konstan: koordinat GPS, hari dalam seminggu, konfigurasi server.
# tuple_dasar.py
# Membuat tuple (pakai kurung biasa, atau tanpa kurung pun bisa)
koordinat_sekolah = (-6.9147, 107.6098) # Latitude, Longitude
hari_kerja = ("Senin", "Selasa", "Rabu", "Kamis", "Jumat")
biodata = "Rifqi", "RPL", 12 # Tanpa kurung juga jadi tuple (Tuple Packing)
# Akses sama seperti list
print("Hari pertama:", hari_kerja[0])
print("Koordinat:', koordinat_sekolah)
# Tuple Unpacking — fitur kesukaan saya
nama, jurusan, kelas = biodata
print(f"Nama: {nama}, Jurusan: {jurusan}, Kelas: {kelas}")
# Mencoba ubah? Akan ERROR
# hari_kerja[0] = "Minggu" # TypeError: 'tuple' object does not support item assignment
# Tapi... kalau isinya list, list-nya bisa diubah!
data_mahasiswa = ("Budi", ["Python", "JS"])
data_mahasiswa[1].append("Go") # Ini BISA!
print("Skill Budi sekarang:", data_mahasiswa)Penjelasan:
Tuple itu aman. Anda yakin data tidak akan berubah di tengah jalan. Tuple Unpacking (baris nama, jurusan, kelas = biodata) itu cara Python yang elegan untuk memecah data sekaligus. Satu baris, tiga variabel terisi.
💡 Tips Pro: Fungsi Python secara default return satu nilai. Mau return banyak? Kembalikan Tuple.
def hitung_statistik(data): return min(data), max(data), sum(data)/len(data) terkecil, terbesar, rata2 = hitung_statistik([10, 20, 30])Bersih, kan?
3. Set: Kotak Kancing yang Unik
Set itu tidak urut (unordered), tidak boleh duplikat, dan bisa diubah. Anggap seperti kotak kancing milik ibu: Anda cuma peduli ada atau tidaknya warna merah, bukan urutan kancing ke-1, ke-2. Operasi set (gabungan, irisan, beda) mirip diagram Venn di Matematika.
# set_dasar.py
# Membuat set (pakai kurung kurawal)
hobi_saya = {"Coding", "Ngopi", "Main Game", "Ngopi"} # "Ngopi" dobel? Cuma disimpan sekali.
print("Hobi unik:", hobi_saya) # Urutan acak setiap dijalankan
hobi_teman = {"Ngopi", "Baca", "Olahraga", "Traveling"}
# Operasi Himpunan — ingat pelajaran Matematika SMP?
gabungan = hobi_saya | hobi_teman # Union: semua hobi
irisan = hobi_saya & hobi_teman # Intersection: hobi sama
beda = hobi_saya - hobi_teman # Difference: hobi saya yang beda
simetris = hobi_saya ^ hobi_teman # Symmetric diff: hobi yang tidak sama
print("Gabungan:", gabungan)
print("Sama-sama suka:", irisan)
print("Hobi saya doang:", beda)
# Manipulasi
hobi_saya.add("Fotografi")
hobi_saya.discard("Main Game") # Aman kalau item nggak ada (ngga error)
print("Update hobi:", hobi_saya)Penjelasan:
Set itu cepat untuk ngecek keanggotaan ("Ngopi" in hobi_saya) dibanding List. Kompleksitasnya O(1) vs O(n). Cocok untuk tag, unique ID, atau hapus duplikat data mentah.
⚠️ Jebakan Umum: Set tidak punya index.
hobi_saya[0]ERROR. Juga, Set hanya bisa nyimpan data immutable (int, str, tuple). List atau Dict di dalam Set? TypeError: unhashable type.
4. Dictionary: Buku Telepon Modern
Dictionary (Dict) itu pasangan Key: Value. Key harus unik dan immutable (str, int, tuple). Value boleh apa aja. Sejak Python 3.7, Dict menjaga urutan penyisipan. Ini paling mirip dunia nyata: KTP → Nama, NIM → Data Siswa, SKU → Detail Produk.
# dict_dasar.py
# Membuat Dictionary
siswa = {
"nama": "Siti",
"kelas": "12 RPL 1",
"nilai": {"python": 95, "web": 88, "db": 90}, # Nested dict
"aktif": True
}
# Akses via Key
print("Nama:", siswa["nama"])
print("Nilai Python:", siswa["nilai"]["python"]) # Masuk ke nested dict
# Cara aman akses (ngga error kalau key nggak ada)
print("Alamat:", siswa.get("alamat", "Tidak diisi")) # Default value
# Ubah & Tambah
siswa["nilai"]["python"] = 98 # Update nested
siswa["jurusan"] = "RPL" # Tambah key baru
print("Data terbaru:", siswa)
# Iterasi — tiga cara favorit
print("\n--- Iterasi Dictionary ---")
for key in siswa:
print(f"Key: {key}")
for value in siswa.values():
print(f"Value: {value}")
for key, value in siswa.items(): # Paling sering dipakai
print(f"{key.capitalize()}: {value}")
# Hapus
nilai_web = siswa["nilai"].pop("web") # Hapus & ambil nilai
del siswa["aktif"] # Hapus pakai del
print(f"Nilai Web {nilai_web} dihapus. Sisa: {siswa}")Penjelasan:
Dict itu otak dari banyak aplikasi. JSON di web? Dict. Konfigurasi database? Dict. Response API? Dict. Method .get() itu penyelamat — mencegah KeyError tanpa perlu try-except. Dan .items() saat looping? Itu idiom Python standar.
💡 Pengalaman Nyata: Siswa sering bikin
if "key" in dict: val = dict["key"]. Dua baris. Cukup satu:val = dict.get("key"). Hidup jadi lebih simpel.
5. Kapan Pakai Mana? — Cheat Sheet untuk Hidup
| Butuh… | Pilih… | Kenapa? |
|---|---|---|
| Urutan penting, data berubah-ubah | List | append, pop, sort siap pakai |
| Data harus konstan, proteksi dari salah edit | Tuple | Cepat, hemat memori, aman untuk key Dict |
| Cek keberadaan cepat, hapus duplikat, operasi himpunan | Set | in super cepat, | & - ^ bawaan |
| Akses via nama/label (Key), struktur data kompleks | Dictionary | Mirip JSON, fleksibel, lookup O(1) |
Latihan Kecil untuk Malam Ini
Coba buat program mini: Sistem Absensi Sederhana.
- Pakai Set untuk simpan nama siswa yang hadir (otomatis unik).
- Pakai Dictionary untuk mapping
nama → {masuk: jam, keluar: jam}. - Pakai List untuk simpan riwayat aktivitas hari ini (log).
- Pakai Tuple untuk konfigurasi jam sekolah
(jam_masuk, jam_pulang)yang nggak boleh diubah.
Kunci jawaban ada di hati Anda. Jangan cari di Google. Coba ketik, error, perbaiki. Itu cara belajar paling jujur.
Penutup: Meja Kerja Anda Sudah Siap
Empat kotak ajaib ini — List, Tuple, Set, Dictionary — adalah fondasi manipulasi data di Python. Hampir tidak ada program nyata yang lepas dari mereka. List untuk antrean, Tuple untuk konstanta, Set untuk keunikan, Dict untuk struktur.
Saat Anda nanti di dunia kerja, Anda akan melihat request.json() mengembalikan Dict, df.columns berupa Index (mirip List), koordinat map pakai Tuple, dan permission user disimpan di Set.
Kumpulan data itu seperti kenangan. Ada yang urut seperti List, ada yang terkunci seperti Tuple, ada yang unik seperti Set, dan ada yang punya label seperti Dictionary. Belajar mengelola koleksi, itu belajar mengelola kenangan — supaya nanti Anda tau mana yang disimpan, mana yang dibuang, dan mana yang dicari saat butuh.
Bagian selanjutnya kita masuk ke Fungsi (Functions) — cara kita merapikan kode agar tidak berantakan, bisa dipakai ulang, dan dibaca tim lain. Siapkah kotak alat Anda?
Sampai ketemu di Bagian 7: Fungsi — Merapikan Kacauan, Membangun Kebiasaan Baik.