Operator dalam “Python” in

143

Saya agak bingung tentang python in operator untuk set.

Jika saya memiliki satu set sdan beberapa contoh b, apakah benar itu b in sberarti " ada beberapa unsur xdalam ssehingga b == xmerupakantrue "?

Dejas
sumber
77
Apakah Anda seorang ahli matematika? Menggambarkan hal-hal sederhana dengan cara yang terlalu rumit ..;)
ThiefMaster
13
Ilmuwan komputer. Saya hanya sedikit bingung karena dokumentasi mengatakan "Tes x untuk keanggotaan dalam s." Bagi saya itu bisa berarti "instance x terkandung dalam s" atau "beberapa instance ada di s yang memiliki nilai yang sama dengan x". Saya tidak tahu apakah ini perbandingan identitas atau kesetaraan.
Dejas
6
@Dejas: Karena Anda mengetahui bahwa Python memiliki dua operator, yakni perbandingan kesetaraan dan perbandingan identitas, Anda harus dapat membuat percobaan yang mengonfirmasi masing-masing. Ini akan membantu jika Anda memposting percobaan itu.
S.Lott

Jawaban:

101

Ya, tapi itu juga berarti hash(b) == hash(x), jadi kesetaraan barang tidak cukup untuk membuatnya sama.

Ignacio Vazquez-Abrams
sumber
14
Ok jadi "apakah ada elemen x dalam s sehingga hash (b) == hash (x) dan x == b"?
Dejas
12
Jika seseorang mengimplementasikan fungsi hash kelasnya dengan cara memutar, inilah yang mungkin ia dapatkan (dan pantas).
ugoren
84

Betul sekali. Anda bisa mencobanya di interpreter seperti ini:

>>> a_set = set(['a', 'b', 'c'])

>>> 'a' in a_set
True

>>>'d' in a_set
False
Niclas Nilsson
sumber
2
Ini bukan tes yang sangat baik karena konstanta string sering diinternir (coba a = 'a'; b = 'a'; a is b). Saya mencobanya dengan a = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])gantinya.
Philipp
11

Ya itu bisa berarti begitu, atau itu bisa menjadi iterator sederhana. Sebagai contoh: Contoh sebagai iterator:

a=set(['1','2','3'])
for x in a:
 print ('This set contains the value ' + x)

Demikian pula sebagai cek:

a=set('ILovePython')
if 'I' in a:
 print ('There is an "I" in here')

diedit: diedit untuk memasukkan set daripada daftar dan string

Arnab Ghosal
sumber
2
Apa hubungannya ini dengan set?
Ignacio Vazquez-Abrams
baik saya kira daftar atau bahkan string dapat dianggap memiliki properti yang mirip dengan satu set. Mereka adalah kumpulan elemen.
Arnab Ghosal
1
Tidak, set memiliki kondisi tambahan untuk pemeriksaan kontainmen yang urutannya tidak.
Ignacio Vazquez-Abrams
3

String, meskipun bukan settipe, memiliki inproperti yang berharga selama validasi dalam skrip:

yn = input("Are you sure you want to do this? ")
if yn in "yes":
    #accepts 'y' OR 'e' OR 's' OR 'ye' OR 'es' OR 'yes'
    return True
return False

Saya harap ini membantu Anda lebih memahami penggunaan indengan contoh ini.

Droogan
sumber
2
Itu bukan satu set. String juga tidak bisa berubah.
Ignacio Vazquez-Abrams
7
... or 'e' or 'es' or 's'. Pertimbangkan untuk menghapus jawaban yang salah dan tanpa tujuan ini.
Quuxplusone
3

Set berperilaku berbeda dari yang lain, Anda perlu menggunakan operasi set seperti issubset ():

>>> k
{'ip': '123.123.123.123', 'pw': 'test1234', 'port': 1234, 'debug': True}
>>> set('ip,port,pw'.split(',')).issubset(set(k.keys()))
True
>>> set('ip,port,pw'.split(',')) in set(k.keys())
False
MortenB
sumber
Itu menarik. Dan aplikasi dunia nyata yang hebat juga.
Armstrongest