Soal 1Manakah di antara berikut yang membuat set dengan benar?
Cara Menggunakan Set Python (set)
Pelajari tipe set Python dari dasar. Cakup koleksi tanpa duplikat dan tanpa urutan, operasi elemen, dan operasi himpunan.
Apa itu set — tanpa duplikat, tanpa urutan
set (set) sama seperti list dan tuple, yaitu tipe untuk mengumpulkan beberapa nilai. Tapi punya dua aturan yang membuatnya berbeda.
- Setiap nilai hanya muncul sekali (duplikat otomatis dibuang)
- Urutan tidak dipertahankan (posisi tidak punya makna)
Meskipun kamu masukkan nilai yang sama dua kali, di set akhirnya hanya tersisa satu.
(Pada contoh ini, a berakhir jadi satu.)
Deklarasikan dengan membungkus nilai dalam { dan }, dipisah koma.
Untuk set kosong, pakai set() bukan {}. Kalau pakai {}, kamu malah dapat dict kosong.
# Duplikat otomatis dibuang
set_a = {"a", "b", "c", "d", "a"}
print(set_a) # {'a', 'b', 'c', 'd'} (urutan tergantung environment)
print(type(set_a)) # <class 'set'>
print(len(set_a)) # 4 ('a' yang duplikat digabung jadi satu)
# Mencampur angka dan tipe lain tidak masalah
mixed = {1, "apple", 3.14}
# Pakai set() untuk set kosong
empty_set = set()
empty_dict = {} # ini jadi "dict kosong"
print(type(empty_set)) # <class 'set'>
print(type(empty_dict)) # <class 'dict'>
# Pakai in / not in untuk cek keanggotaan
print("a" in set_a) # True
print("z" not in set_a) # True
Tanpa urutan, jadi tidak ada akses lewat index
Karena set tidak punya urutan, kamu tidak bisa akses pakai index seperti set_a[0] (akan kena TypeError). Kalau butuh elemen ke-N, konversi dulu ke list atau tuple lalu ambil dari sana. Pilih sesuai kebutuhan: list / tuple kalau urutan penting, set kalau tidak.
Menambah dan menghapus elemen
set adalah tipe mutable, jadi kamu bisa menambah dan menghapus elemen setelah dideklarasikan.
Lima metode yang paling sering kamu pakai ada di bawah ini.
| Metode | Peran | Catatan |
|---|---|---|
| add(x) | Tambah elemen x | Tidak melakukan apa-apa kalau sudah ada (duplikat diabaikan) |
| remove(x) | Hapus elemen x | KeyError kalau x tidak ada |
| discard(x) | Hapus elemen x | Tidak error meski x tidak ada |
| pop() | Hapus dan kembalikan satu elemen sembarang | Yang dipilih tidak ditentukan |
| clear() | Hapus semua elemen | Menyisakan set kosong |
fruits = {"apple", "banana", "lemon"}
# add
fruits.add("grape")
fruits.add("apple") # sudah ada, diabaikan
print(fruits) # {'apple', 'banana', 'lemon', 'grape'}
# remove (error kalau tidak ada)
fruits.remove("banana")
# fruits.remove("melon") # KeyError
# discard tetap diam meski tidak ada
fruits.discard("melon") # tidak terjadi apa-apa
print(fruits) # {'apple', 'lemon', 'grape'}
# Hapus dan kembalikan satu elemen acak
picked = fruits.pop()
print(picked) # elemen apa saja (berbeda tiap run)
# Hapus semua
fruits.clear()
print(fruits) # set()
Pakai remove kalau kamu ingin tahu kalau nilainya tidak ada (ini melempar error).
Pakai discard kalau kamu hanya ingin menghapus kalau ada dan tidak peduli kalau tidak ada.
Operasi himpunan — union, intersection, difference, symmetric difference
Kekuatan terbesar set adalah operasi himpunan. Kamu bisa menggabung dua set untuk mengambil elemen yang sama, atau elemen yang hanya ada di salah satu, dalam satu baris. Kamu bisa melakukan hal serupa dengan loop for pada list, tapi set jauh lebih cepat.
- Union — semua elemen yang muncul di salah satu set
- Intersection — hanya elemen yang muncul di keduanya
- Difference — elemen di
stapi tidak dit - Symmetric difference — elemen yang muncul di tepat satu di antara keduanya
Diagram di bawah menunjukkan hasil ketika s = {a, b, c, d} dan t = {c, d, e, f}.
Operator (| & - ^) dan metode (union, dst.) setara — pakai salah satu.
s = {"a", "b", "c", "d"}
t = {"c", "d", "e", "f"}
# Union
print(s | t) # {'a', 'b', 'c', 'd', 'e', 'f'}
print(s.union(t)) # sama
# Intersection
print(s & t) # {'c', 'd'}
print(s.intersection(t)) # sama
# Difference (di s, bukan di t)
print(s - t) # {'a', 'b'}
print(s.difference(t)) # sama
# Symmetric difference (di tepat satu)
print(s ^ t) # {'a', 'b', 'e', 'f'}
print(s.symmetric_difference(t)) # sama
Pengecekan subset (catatan tambahan)
a <= b atau a.issubset(b) memberi tahu apakah setiap elemen a ada di b, mengembalikan True / False. Arah sebaliknya adalah a >= b atau a.issuperset(b).
Ini dipakai untuk pengecekan seperti "apakah set izin user mengandung semua izin yang diperlukan?". Awalnya fokuslah pada empat operasi himpunan dan pakai ini kalau memang perlu.
Pola nyata — dedup dan pengecekan keanggotaan cepat
Terakhir, mari kuasai dua pola andalan yang selalu muncul di pekerjaan nyata.
list(set(...)) — «konversi ke set untuk buang duplikat, lalu kembalikan ke list» — adalah idiom umum.
Satu baris, cepat, dan jauh lebih bersih dibanding loop for dengan pengecekan seen.
# Pola ①: dedup
numbers = [1, 2, 2, 2, 3, 4, 4, 5, 6, 6]
unique_numbers = list(set(numbers))
print(unique_numbers) # [1, 2, 3, 4, 5, 6] (urutan bisa beda)
# Pola ②: pengecekan keanggotaan cepat
# x in set jauh lebih cepat daripada x in list
allowed_users = {"alice", "bob", "carol"}
print("alice" in allowed_users) # True
print("dan" in allowed_users) # False
Kenapa in cepat di set
set didukung oleh hash table. Dia mencari nilai langsung lewat hash-nya, jadi pencarian memakan waktu yang kira-kira tetap tanpa peduli ukuran.
in di list membandingkan elemen satu per satu dari awal, jadi makin besar list makin lambat. Kalau kamu akan cek keanggotaan berkali-kali, konversi ke set dulu dan kamu akan dapat percepatan dramatis.
Di artikel ini, kamu sudah melihat ciri set (tanpa duplikat, tanpa urutan), metode tambah/hapus-nya, empat operasi himpunan, dan dua pola nyata — dedup dan pengecekan keanggotaan cepat.
«Aku tidak peduli urutan, hanya mau yang unik» / «Aku cek keanggotaan berulang-ulang» / «Aku butuh irisan dua himpunan» — kalau salah satunya pas, saatnya pakai set.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Diberikan s = {1, 2, 3}, apa yang terjadi saat kamu jalankan s.discard(99)? (99 tidak ada di set)
Soal 3Dengan s = {1, 2, 3, 4} dan t = {3, 4, 5, 6}, apa hasil s & t?