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 "?


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.


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

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


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.


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

Itu menarik. Dan aplikasi dunia nyata yang hebat juga.
Armstrongest
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.