Python'un "giriş" ayar operatörü


143

inSetler için python operatörü hakkında biraz kafam karıştı .

Bir dizi varsa sve bazı örneği b, bu doğrudur b in sanlamına gelir " bazı unsur vardır xiçinde sböyle b == xbirtrue "?


77
Bir matematikçi misiniz? Basit şeyleri aşırı karmaşık bir şekilde tanımlamak ..;)
ThiefMaster

13
Bilgisayar uzmanı. Biraz kafam karıştı çünkü belgeler "X üyeliğini test edin" diyor. Benim için "x örneği s içinde yer alıyor" veya "x ile aynı değere sahip s'de bir örnek var" anlamına gelebilir. Bunun bir kimlik mi yoksa eşitlik karşılaştırması mı olduğunu bilmiyorum.
Dejas

6
@Dejas: Python'un Eşitlik karşılaştırması ve kimlik karşılaştırması olmak üzere iki operatörü olduğunu bildiğiniz için, her birini doğrulayan bir deneme oluşturabilmeniz gerekir. Bu deneyi gönderirseniz yardımcı olur.
S.Lott

Yanıtlar:


101

Evet, ama bu aynı zamanda araç hash(b) == hash(x), öğeleri eşitlik hepsine aynı hale getirmek için yeterli değildir bu yüzden.


14
Peki "karma (b) == karma (x) ve x == b olacak şekilde x öğesinde x öğesi var mı?"
Dejas

12
Birisi sınıfının karma işlevini bükülmüş bir şekilde uygularsa, bu elde edebileceği (ve hak edebileceği) şeydir.
ugoren

84

Doğru. Bunu şu şekilde yorumlayıcıda deneyebilirsiniz:

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

>>> 'a' in a_set
True

>>>'d' in a_set
False

2
Bu çok iyi bir test değildir, çünkü string sabitleri sıklıkla stajyerdir (deneyin a = 'a'; b = 'a'; a is b). Bunun a = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])yerine denedim .
Philipp

11

Evet, bu demek olabilir veya basit bir yineleyici olabilir. Örneğin: Yineleyici olarak örnek:

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

Benzer şekilde çek olarak:

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

edited: listeler ve dizeler yerine kümeleri içerecek şekilde düzenlendi


2
Bunun setlerle ne ilgisi var?
Ignacio Vazquez-Abrams

iyi bir liste varsayalım, hatta bir dize bir kümeye benzer özelliklere sahip olarak kabul edilebilir. Bunlar bir elementler topluluğudur.
Arnab Ghosal

1
Hayır, kümelerin sekansların içermediği bir kontrol kontrolü için ek bir koşulu vardır.
Ignacio Vazquez-Abrams

3

Dizeler, tür olmasa da, komut dosyalarında doğrulama sırasında setdeğerli bir inözelliğe sahiptir:

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

Umarım bu in, bu örnekle kullanımını daha iyi anlamanıza yardımcı olur .


2
Bu bir set değil. Dizeler de değişmez.
Ignacio Vazquez-Abrams

7
... or 'e' or 'es' or 's'. Bu anlamsız yanlış yanıtı silmeyi düşünün.
Quuxplusone

3

Setler dikteden farklı davranır, issubset () gibi set işlemlerini kullanmanız gerekir:

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

İlginç. Ve aynı zamanda harika bir gerçek dünya uygulaması.
Armstrongest
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.