Pertanyaan “apakah data ini ada di dalam kumpulan itu” muncul di mana-mana: apakah nama pengguna sudah terdaftar, apakah sebuah kata muncul dalam kalimat, apakah menu yang dipesan tersedia. Operator keanggotaan in dan not in menjawab pertanyaan tersebut dengan True atau False. Keduanya bekerja pada hampir semua struktur data bawaan Python, dengan satu perbedaan perilaku penting pada dictionary.

Operator in dan not in #

Operator in menguji apakah sebuah nilai menjadi bagian dari kumpulan data; not in menguji kebalikannya. Pada string, pengujian dilakukan terhadap substring — urutan huruf yang berada di dalam string lain:

python
>>> "py" in "python"
True
>>> "PY" in "python"
False
>>> "hon" in "python"
True
>>> "java" not in "python"
True

Perhatikan bahwa pengujian pada string bersifat case-sensitive: substring "PY" tidak ditemukan karena bentuk hurufnya berbeda. Pencarian substring memindai seluruh isi string dari awal, bukan hanya kata per kata.

Keanggotaan pada List, Tuple, dan Set #

Pada list, tuple, dan set, operator in menguji keberadaan satu elemen yang nilainya sama dengan yang dicari:

python
>>> 3 in [1, 2, 3]
True
>>> 3 in (1, 2)
False
>>> 3 in {1, 2, 3}
True
>>> 3 not in {1, 2}
True

List [1, 2, 3] memang memiliki elemen bernilai 3, sedangkan tuple (1, 2) tidak. Nilai yang dicari dibandingkan memakai ==, bukan is, sehingga pengujian bekerja berdasarkan kesamaan nilai.

Keanggotaan pada Dictionary #

Pada dictionary, operator in hanya memeriksa key, bukan value:

python
>>> pengguna = {"nama": "Budi", "umur": 17}
>>> "nama" in pengguna
True
>>> "Budi" in pengguna
False
>>> "Budi" in pengguna.values()
True
>>> "umur" not in pengguna
False

Nilai "Budi" memang tersimpan sebagai value dari key "nama", tetapi in tetap menghasilkan False karena pencarian hanya menyasar kumpulan key. Untuk menguji keberadaan value, kita perlu memanggil method values() secara eksplisit. Perilaku ini mengikuti fungsi utama dictionary: mencari value berdasarkan key dalam satu langkah.

Contoh Praktis #

Mari kita gunakan operator keanggotaan untuk memvalidasi pesanan pelanggan:

python
menu_tersedia = ["nasi goreng", "mie ayam", "sate"]

pesanan = "mie ayam"
print("Pesanan tersedia:", pesanan in menu_tersedia)

pesanan = "pizza"
print("Pesanan tersedia:", pesanan in menu_tersedia)

Output yang Dihasilkan:

text
Pesanan tersedia: True
Pesanan tersedia: False

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 1 (menu_tersedia = [...]): list menyimpan seluruh nama menu yang bisa dipesan hari ini.
  2. Baris 3-4 (pesanan in menu_tersedia): interpreter Python membandingkan string "mie ayam" dengan setiap elemen list menggunakan ==; elemen kedua cocok sehingga hasilnya True.
  3. Baris 6-7 ("pizza"): tidak ada elemen yang sama dengan "pizza", sehingga seluruh list habis diperiksa dan hasilnya False.

Pengujian seperti ini adalah pintu masuk alami menuju pengambilan keputusan — misalnya if pesanan in menu_tersedia: — yang akan kita bangun pada Section Control Flow.