Kursus Python / Menggunakan tuple dan unpacking dengan benar

Tuple adalah urutan yang mempertahankan posisi unsur dan tidak mengizinkan penggantian referensi unsurnya. Tuple berguna untuk catatan pendek atau beberapa nilai hasil fungsi, tetapi objek yang dapat berubah di dalam tuple tetap dapat diubah.

Buat tuple dan pahami batas sifat tetapnya

Koma berperan penting dalam pembuatan tuple; tanda kurung memperjelas pengelompokan. Tuple satu unsur membutuhkan koma, seperti (3500,). Tanpa koma, (3500) hanyalah ekspresi integer yang dikelompokkan. Tuple kosong ditulis ().

single = (3500,)
record = ("lunch", 8000)
print(type(single).__name__)
print(record[0])

Contoh tersebut menampilkan tuple pada baris pertama dan lunch pada baris kedua. Indeks dimulai dari nol, sehingga record[0] mengambil nama. Tutorial tuple dan urutan Python menjelaskan pembuatan serta pemakaiannya.

Sifat tetap tuple berarti Anda tidak dapat mengganti unsur melalui penugasan seperti record[0] = "dinner". Hal ini tidak menjadikan semua objek di dalamnya tetap. Dengan pair = ([1], 2), penugasan pair[0] = [] gagal, tetapi pair[0].append(3) berhasil karena yang diubah adalah isi list. Hasilnya menjadi ([1, 3], 2). Bandingkan dengan perubahan dan referensi bersama pada list agar batas objek luar dan dalam jelas.

Jalankan contoh unpacking lengkap

Unpacking menempatkan unsur dari suatu urutan ke beberapa target penugasan. Simpan kode lengkap berikut sebagai tuples.py dengan encoding UTF-8. Gunakan Python 3.12 atau lebih baru dan jalankan python tuples.py di terminal lingkungan proyek. Tidak perlu paket tambahan atau berkas data.

record = ("lunch", 8000, "food")
name, amount, category = record
print(name, amount, category)
first, *rest = [3500, 8000, 2500]
print(first, rest)
a, b = 1, 2
a, b = b, a
print(a, b)

Keluaran yang diharapkan:

lunch 8000 food
3500 [8000, 2500]
2 1

Baris pertama membongkar tiga unsur catatan ke nama yang sesuai. Pada penugasan first, *rest, nilai pertama menjadi 3500 dan nilai lainnya dikumpulkan ke list [8000, 2500]. Pada pertukaran a, b = b, a, bagian kanan dievaluasi sebelum penugasan, sehingga nilai lama dapat dipertukarkan tanpa variabel sementara yang ditulis secara terpisah.

Cocokkan jumlah unsur dan arti setiap posisi

Tanpa target berbintang, jumlah unsur harus sama dengan jumlah target. Dua atau empat unsur tidak dapat langsung ditempatkan ke tiga nama; Python menghasilkan ValueError. Target berbintang menerima sisa unsur sebagai list, termasuk list kosong jika tidak ada sisa. Tetap harus tersedia cukup unsur untuk target tanpa bintang.

Pada first, *rest = [3500], first bernilai 3500 dan rest menjadi []. Jika sumbernya kosong, target first tidak mendapat unsur dan penugasan gagal. Satu daftar target pada tingkat yang sama hanya boleh memiliki satu target berbintang; pola a, *b, *c = ... tidak sah. Aturan ini dijelaskan dalam referensi penugasan Python.

Unpacking juga dapat membaca objek yang dapat diiterasi selain tuple. Jika Anda membongkar dictionary secara langsung, yang diterima adalah kunci menurut urutan iterasi. Untuk pasangan kunci dan nilai, gunakan items() dan bongkar setiap pasangannya. Jangan menganggap nilai dictionary otomatis diberikan hanya karena target bernama value.

Jumlah unsur yang cocok belum menjamin maknanya benar. Catatan ("lunch", "food", 8000) tetap memiliki tiga unsur, tetapi urutannya berbeda dari kontrak contoh. Periksa bentuk dan arti kolom data eksternal sebelum unpacking, terutama jika asalnya berkas atau respons jaringan.

Pilih list, tuple, atau catatan bernama

Kebutuhan Pilihan yang sesuai
Deretan jumlah yang terus bertambah List
Kelompok pendek dengan arti posisi tetap Tuple
Banyak kolom yang perlu diakses menurut nama Dictionary atau dataclass

Tuple dapat menjadi kunci dictionary hanya jika seluruh unsurnya hashable, yaitu mendukung nilai hash dan aturan kesetaraan yang dibutuhkan struktur tersebut. Tuple berisi string dan integer seperti ("lunch", 8000) dapat digunakan sebagai kunci. Tuple yang memuat list tidak dapat, karena list tidak hashable. Referensi dictionary Python menjelaskan persyaratan kunci.

  1. Jalankan program asli dan cocokkan tiga baris keluarannya.
  2. Hapus unsur "food" dari record, tetapi biarkan tiga target penugasan. Program gagal dengan ValueError.
  3. Untuk mencoba bentuk dua kolom, ubah penugasan menjadi name, amount = record dan ubah baris keluaran menjadi print(name, amount). Keduanya perlu disesuaikan agar tidak memakai category yang belum didefinisikan.
  4. Kembalikan tuple, target, dan baris keluaran ke bentuk tiga kolom, lalu jalankan ulang untuk memastikan hasil semula pulih.

Jika arti posisi mulai sulit diingat atau kolom sering tertukar, nama bidang dapat menyampaikan model data dengan lebih jelas. Pilih struktur berdasarkan kebutuhan akses dan perubahan, bukan hanya karena tuple tampak lebih ringkas.