Kursus Python / Menggunakan set untuk keanggotaan dan operasi himpunan
Set atau himpunan menyimpan unsur hashable yang unik dan mendukung pemeriksaan keanggotaan serta operasi antarkumpulan. Mengubah data menjadi set menghilangkan jumlah kemunculan berulang dan informasi posisi, jadi pastikan informasi itu memang tidak diperlukan.
Buat set dan baca operasi antarhimpunan
Set yang tidak kosong dapat ditulis seperti {"food", "books"}. Gunakan set() untuk set kosong, karena {} membuat dictionary. Unsur harus hashable, seperti persyaratan kunci dalam contoh dictionary untuk total kategori. List dan dictionary tidak dapat langsung menjadi unsur set.
| Ekspresi | Makna |
|---|---|
a | b |
Gabungan: unsur yang ada di a atau b |
a & b |
Irisan: unsur yang ada di keduanya |
a - b |
Selisih: unsur yang ada di a tetapi tidak di b |
a ^ b |
Selisih simetris: unsur yang hanya ada di salah satu set |
Set tidak menyediakan akses posisi seperti items[0]. Urutan tampil atau iterasinya tidak boleh menjadi kontrak urutan data. Jika hasil perlu dibaca dengan urutan stabil, buat tampilan terurut dari unsur yang memang dapat dibandingkan. Referensi set dan frozenset Python menjelaskan operasi dan batasnya.
Bandingkan kategori yang dipakai dan diizinkan
Simpan kode lengkap berikut sebagai sets.py dengan encoding UTF-8. Gunakan Python 3.12 atau lebih baru, lalu jalankan python sets.py dari folder latihan melalui lingkungan proyek. Tidak diperlukan berkas data atau paket tambahan.
used = {"food", "transport", "food"}
allowed = {"food", "books"}
print(sorted(used))
print(sorted(used & allowed))
print(sorted(used - allowed))
used.discard("missing")
print("food" in used)
Keluaran yang diharapkan:
['food', 'transport']
['food']
['transport']
True
food muncul dua kali dalam literal awal, tetapi hanya menjadi satu unsur. Karena itu, used memiliki dua kategori. used & allowed menemukan food yang ada di keduanya. used - allowed menemukan transport yang dipakai tetapi belum diizinkan. Arah selisih penting: allowed - used justru menemukan books yang diizinkan tetapi belum dipakai.
sorted() mengembalikan list terurut untuk ditampilkan, bukan menjadikan set asli terurut. discard("missing") tidak gagal walaupun kategori itu tidak ada. Pemeriksaan "food" in used menghasilkan nilai boolean True.
Bedakan penghapusan duplikat dan validasi identitas
Jika tujuan Anda hanya mengetahui kategori yang pernah digunakan, set merupakan pilihan yang sesuai. Namun, ia tidak menyimpan berapa kali setiap kategori muncul. Untuk menghitung frekuensi atau total, gunakan struktur penghitungan tersendiri; jangan mengharapkan informasi yang sudah dibuang dapat dipulihkan dari set.
Untuk unsur hashable, list(dict.fromkeys(items)) dapat menghapus duplikat sambil mempertahankan urutan kemunculan pertama. Cara ini tetap menghilangkan hitungan pengulangan. Pilih secara sengaja apakah penghapusan duplikat merupakan transformasi yang diizinkan atau justru menyembunyikan masukan bermasalah.
Dua transaksi dengan jumlah 8000 dapat merupakan dua pembayaran yang berbeda. List [8000, 8000] memiliki jumlah 16000, sedangkan set dari nilai-nilai tersebut hanya berisi satu 8000. Memakai set untuk jumlah transaksi akan menghasilkan total yang salah. Gunakan ID transaksi yang stabil untuk memeriksa identitas, lalu tentukan apakah ID berulang harus ditolak atau memperbarui catatan lama.
Operasi set menghasilkan kumpulan baru untuk ekspresi pada tabel. Jika ingin mempertahankan sumber, simpan hasil pada nama lain. Metode atau operator pembaruan seperti update() dan |= memiliki tujuan berbeda karena mengubah set yang sedang digunakan; jangan mencampurkan keduanya saat membandingkan data sebelum dan sesudah.
Pilih perilaku penghapusan dan uji perubahan
remove() menghasilkan KeyError jika unsur tidak ada, sedangkan discard() menerima keadaan itu. Jika unsur wajib ada, kesalahan dari remove() dapat memperlihatkan pelanggaran persyaratan. Untuk pembersihan opsional, discard() sering lebih sesuai. Nilai yang dipilih harus mengikuti aturan aplikasi, bukan sekadar menghindari pesan kesalahan.
- Jalankan program asli dan cocokkan keempat baris keluaran.
- Tambahkan
used.add("food")setelah pembuatan kedua set. Ukuranusedtetap2karena unsurnya sudah ada. - Ganti baris percobaan itu menjadi
used.add("books"). Irisan yang ditampilkan menjadi['books', 'food'], sedangkan selisihused - allowedtetap['transport']. - Hapus baris percobaan dan jalankan kembali untuk memastikan hasil asli pulih. Secara terpisah, ubah
discard("missing")menjadiremove("missing")untuk mengamatiKeyError, lalu kembalikan.
Memilih list, tuple, dictionary, atau set berarti memilih informasi yang akan dipertahankan. List menyimpan urutan dan pengulangan, tuple cocok untuk kelompok posisi tetap, dictionary menyediakan pencarian menurut nama kunci, dan set berfokus pada keunikan serta keanggotaan. Gunakan kebutuhan data untuk menentukan struktur.




