Pada chapter Perulangan kita memproses data satu per satu. Pekerjaan analisis yang sesungguhnya jarang sekecil itu: data mentah hampir selalu datang berkelompok — deret nilai transaksi, baris catatan penjualan, daftar harga menu, hingga nama pelanggan yang muncul berulang. Python menyediakan empat struktur data bawaan untuk menampung kelompok-kelompok tersebut, dan kebiasaan memilih struktur yang tepat ikut menentukan apakah kode analisis kita ringkas atau berbelit. Pada chapter ini kita membedah list, tuple, dictionary, dan set memakai data penjualan Toko Kopi Kita, lalu menutup dengan tabel panduan memilih di antara keempatnya.
List untuk Deret Data yang Fleksibel #
List adalah struktur yang paling sering kita pakai sehari-hari: kumpulan nilai berurutan yang isinya bisa berubah kapan saja, dan setiap elemen diakses lewat nomor indeks yang dimulai dari nol. Bagi seorang analis, list adalah wujud alami dari satu deret data — misalnya nilai transaksi tiap pelanggan pada suatu pagi di Toko Kopi Kita (dalam ribuan rupiah).
transaksi = [42, 18, 65, 30, 25]
print("Transaksi pertama:", transaksi[0])
print("Transaksi terakhir:", transaksi[-1])
print("Transaksi ke-2 sampai ke-4:", transaksi[1:4])
transaksi.append(55)
print("Setelah transaksi baru masuk:", transaksi)
print("Ada transaksi 65 ribu?", 65 in transaksi)Output yang Dihasilkan:
Transaksi pertama: 42
Transaksi terakhir: 25
Transaksi ke-2 sampai ke-4: [18, 65, 30]
Setelah transaksi baru masuk: [42, 18, 65, 30, 25, 55]
Ada transaksi 65 ribu? TrueMari kita telaah baris-baris kode di atas:
- Baris 1 (
transaksi = [...]): list literal berisi lima nilai transaksi. Urutan elemen dipertahankan persis seperti saat penulisannya, sehingga urutan ini bisa kita andalkan saat membaca data. - Baris 3-5 (indeks dan slicing):
transaksi[0]menunjuk elemen pertama, sedangkan indeks negatif membaca dari belakang sehinggatransaksi[-1]mengembalikan25. Slicingtransaksi[1:4]mengambil indeks 1 sampai sebelum 4 — batas atas tidak ikut — pola yang nanti sering kita pakai untuk mengambil jendela data seperti tujuh hari terakhir. - Baris 7 (
append):append()menempel satu nilai di ujung list tanpa membuat list baru, cocok untuk data yang terus bertambah sepanjang hari berjalan. - Baris 10 (
in): operatorinmemeriksa keanggotaan dan mengembalikanTrueatauFalse— pertanyaan yang sering kita ajukan saat memeriksa apakah suatu nilai anomali pernah muncul.
Tuple untuk Satu Baris Data yang Terkunci #
Catatan penjualan yang sesungguhnya bukan sekadar angka lepas, melainkan baris utuh: tanggal, produk, jumlah cangkir. Makna tiap kolom melekat pada posisinya, dan bentuk baris itu tidak berubah. Struktur semacam itulah tuple: kumpulan berurutan yang isinya terkunci sejak dibuat. Sifat tidak-bisa-diubah (immutable) ini justru berguna bagi analis — baris data yang sudah dicatat tidak akan berubah tanpa sengaja karena kode lain menulis ke posisinya.
# Satu baris data penjualan: (tanggal, produk, jumlah cangkir)
baris = ("2026-01-12", "kopi susu", 3)
tanggal, produk, jumlah = baris
print(f"{tanggal}: {jumlah} cangkir {produk}")
print("Jumlah kolom:", len(baris))
try:
baris[2] = 5
except TypeError as err:
print("Tuple tidak bisa diubah:", err)Output yang Dihasilkan:
2026-01-12: 3 cangkir kopi susu
Jumlah kolom: 3
Tuple tidak bisa diubah: 'tuple' object does not support item assignmentMari kita bedah kode di atas:
- Baris 2 (
baris = (...)): tuple literal ditulis dengan tanda kurung. Skemanya tetap: posisi 0 selalu tanggal, posisi 1 produk, posisi 2 jumlah — kesepakatan ini yang membuat tuple layak menjadi satu record data. - Baris 4 (unpacking): satu tuple langsung diuraikan ke tiga variabel. Cara ini lebih ringkas dan lebih jelas daripada mengambil
baris[0],baris[1],baris[2]satu per satu. - Baris 6 (
len(baris)): tuple tahu panjangnya sendiri;len()mengembalikannya seperti pada list. - Baris 8-11 (
try/except): usaha mengubah posisi ke-2 ditolak Python denganTypeError. Kita menangkap galat tersebut agar pesannya tercetak rapi, bukan menghentikan program — mekanisme lengkapnya kita bahas pada chapter Penanganan Error .
Gabungkan list dan tuple, dan kita mendapatkan tabel mini: list berisi banyak tuple, misalnya [("2026-01-12", "kopi susu", 3), ("2026-01-13", "matcha", 4)] — setiap elemen adalah satu baris data utuh. Pola pikir “satu baris adalah satu record” inilah yang nanti kita temui lagi ketika bekerja dengan tabel di pandas.
Dictionary untuk Pemetaan Produk ke Harga #
Membaca harga lewat nomor posisi itu rapuh: siapa yang hafal bahwa produk indeks ke-2 adalah matcha? Dictionary menjawab kebutuhan tersebut — mencari nilai lewat nama, bukan nomor. Setiap entri memasangkan kunci dengan nilai, dan daftar harga menu adalah contoh paling alami.
harga = {"kopi susu": 24, "americano": 22, "matcha": 28, "teh tawar": 20}
print("Harga matcha:", harga["matcha"])
print("Harga kopi tubruk:", harga.get("kopi tubruk", "belum terdaftar"))
for produk, nilai in harga.items():
print(f"{produk:12} Rp{nilai}.000")
print("Total harga menu:", sum(harga.values()))Output yang Dihasilkan:
Harga matcha: 28
Harga kopi tubruk: belum terdaftar
kopi susu Rp24.000
americano Rp22.000
matcha Rp28.000
teh tawar Rp20.000
Total harga menu: 94Beberapa hal penting dari contoh di atas:
- Baris 1: kunci harus unik — satu produk hanya boleh punya satu entri harga. Sejak Python 3.7, urutan entri mengikuti urutan penulisan, sehingga laporan yang kita cetak dari dictionary konsisten.
- Baris 3 vs baris 4: akses langsung
harga["kopi tubruk"]akan mengangkatKeyErrorkarena kunci itu belum ada. Metode.get(kunci, nilai_default)lebih aman saat data bisa belum lengkap — ia mengembalikan nilai default alih-alih menghentikan program. - Baris 6-7 (
.items()): iterasi.items()menghasilkan pasangan kunci dan nilai sekaligus, bentuk standar untuk mencetak laporan dari sebuah dictionary. - Baris 9 (
.values()):sum(harga.values())menjumlahkan seluruh nilai tanpa perlu membongkar pasangannya satu per satu.
Set untuk Menyaring Keunikan #
Kasus khas berikutnya: menghitung pelanggan unik dari catatan kunjungan yang memuat nama berulang — Budi datang tiga kali, Siti dua kali. Set menyimpan nilai tanpa duplikat, sehingga duplikasi hilang begitu daftar dimasukkan ke dalamnya. Pemeriksaan keanggotaan pada set juga cepat, bahkan ketika isinya banyak.
pelanggan_hari_ini = ["Budi", "Siti", "Dewi", "Budi", "Rani", "Siti", "Agus", "Budi"]
unik = set(pelanggan_hari_ini)
print("Jumlah kunjungan tercatat:", len(pelanggan_hari_ini))
print("Pelanggan unik (urut):", sorted(unik))
print("Siti masuk daftar unik?", "Siti" in unik)Output yang Dihasilkan:
Jumlah kunjungan tercatat: 8
Pelanggan unik (urut): ['Agus', 'Budi', 'Dewi', 'Rani', 'Siti']
Siti masuk daftar unik? TrueDelapan kunjungan ternyata berasal dari lima orang saja — informasi yang penting untuk mengukur loyalitas pelanggan. Ada satu kebiasaan yang perlu kita tanamkan sejak awal: set tidak menjamin urutan. Memanggil print(unik) bisa menghasilkan urutan yang berbeda-beda, dan itu bukan kesalahan melainkan sifatnya. Karena itu setiap kali hasil set ingin ditampilkan atau disimpan, bungkus dengan sorted() seperti pada contoh — keluarannya menjadi terurut dan konsisten antar eksekusi.
Memilih Struktur Data yang Tepat #
Keempat struktur di atas bukan pesaing, melainkan pembagian peran. Tabel berikut merangkum pertanyaan pemandu yang paling cepat menuntun kita ke struktur yang tepat:
| Struktur | Sifat kunci | Pertanyaan pemandu | Contoh di toko kopi |
|---|---|---|---|
list | Berurutan, isinya bisa berubah | Apakah urutan penting dan datanya terus bertambah? | Deret transaksi harian |
tuple | Berurutan, isinya terkunci | Apakah tiap posisi punya makna tetap seperti kolom? | Baris (tanggal, produk, jumlah) |
dict | Memetakan kunci ke nilai | Apakah nilai lebih sering dicari lewat nama? | Harga per produk |
set | Anggota unik, tanpa urutan | Apakah yang penting hanya keunikan dan keanggotaan? | Nama pelanggan unik |
Struktur-struktur ini juga saling melengkapi: list berisi tuple membentuk tabel kecil, dictionary yang nilainya list bisa menampung banyak transaksi per pelanggan, dan set menjadi alat pemeriksa cepat seperti “apakah produk ini sudah pernah dijual?”. Ketika kita mulai memakai pandas nanti, keempat konsep ini kembali muncul dalam wujud yang lebih besar: kolom tabel adalah deret seperti list, tiap baris adalah record seperti tuple, dan akses kolom lewat nama seperti dictionary.
Referensi Resmi #
- Python Tutorial: Data Structures — bab resmi tutorial Python yang membahas list, tuple, dictionary, dan set secara utuh.
Rangkuman #
listmenampung deret data berurutan yang isinya bisa bertambah dan berubah; akses lewat indeks, slicing, danin.tuplecocok untuk satu baris data yang maknanya melekat pada posisi; sifat terkuncinya menjaga record dari perubahan tak disengaja.dictmemetakan kunci ke nilai; gunakan.get()dengan nilai default saat kunci mungkin belum ada, dan.items()untuk iterasi laporan.setmembuang duplikat dan menjawab pertanyaan keanggotaan dengan cepat, tetapi tidak menjamin urutan — selalu tampilkan lewatsorted().- Pilih struktur berdasarkan pertanyaan pemandu pada tabel, bukan kebiasaan; struktur yang tepat meringkas kode analisis.
Data kini punya wadah yang tepat, tetapi logika pengolahannya masih kita tulis ulang-ulang di banyak tempat. Chapter berikutnya, Fungsi dan Modul , membahas cara membungkus perhitungan menjadi fungsi bernama yang bisa dipakai ulang, memakai modul siap pakai dari pustaka standar, lalu merapikannya menjadi modul buatan sendiri.