2012-01-02 13 views
66

Jestem trochę zdezorientowany pytonem w operatorze dla zestawów.Zestaw operatorów "w" Pythona

Jeśli mam zestaw w pythonach i niektórych instancjach b, czy to prawda, że ​​"b in s" oznacza "czy jest jakiś element xw taki, że b == x jest prawdziwe"?

+27

jesteś matematykiem? Opisywanie prostych rzeczy w zbyt skomplikowany sposób ..;) – ThiefMaster

+5

Informatyk. Jestem trochę zdezorientowany, ponieważ dokumentacja mówi "Test x dla członkostwa w s." Dla mnie może to oznaczać "instancję x zawartą w s" lub "instancja istnieje w s, która ma taką samą wartość jak x". Nie wiem, czy to jest porównanie tożsamości, czy równości. – Dejas

+3

@Dejas: Ponieważ wiesz, że Python ma dwóch operatorów Porównanie Równości i Porównanie tożsamości, powinieneś być w stanie skonstruować eksperyment, który potwierdzi każdy z nich. Pomoże Ci, jeśli opublikujesz ten eksperyment. –

Odpowiedz

55

Tak, ale również oznacza hash(b) == hash(x), więc równość pozycji nie wystarczy, aby uczynić je tak samo.

+7

OK, więc "czy istnieje element xw taki, że hash (b) == hash (x) i x == b"? – Dejas

+0

@Dejas: Prawidłowo. –

+4

Jeśli ktoś zaimplementował funkcję mieszania swojej klasy w pokrętny sposób, może to uzyskać (i na to zasługiwać). – ugoren

0

Tak. Oznacza to, że dany element jest w zbiorze.

+1

Po prostu jasne. przez "jest w zestawie" masz na myśli "a == b", a nie "a jest b", prawda? – Dejas

34

Zgadza się. Można spróbować go w tłumacza tak:

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

>>> 'a' in a_set 
True 

>>>'d' in a_set 
False 
+3

Fyi, 'sets' jest przestarzałe. 'set()' jest wbudowane od dłuższego czasu. – ThiefMaster

+0

Och, oczywiście. Przepraszam :) Zmieniam moją próbkę ... –

+0

To nie jest bardzo dobry test, ponieważ stałe ciągów znaków są często internowane (spróbuj 'a = 'a'; b = 'a'; a is b'). Próbowałem go z 'a = (1, 2, 3); b = (1, 2, 3); a == b; hash (a) == hash (b); a oznacza b; a w zestawie ([b]) 'zamiast tego. – Philipp

0

Strings, chociaż nie są one set typy, posiada cenne in mienia podczas walidacji w skryptach:

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 

Mam nadzieję, że to pomoże Ci lepiej zrozumieć użycie in w tym przykładzie.

+1

To nie jest zestaw. Nie są też łańcuchy zmienne. –

+0

Nie wiem, o czym myślałem ... masz rację. – Droogans

+3

'... lub 'e' lub 'es' lub 's''. Zastanów się, jak usunąć tę bezsensownie niewłaściwą odpowiedź. – Quuxplusone

8

Tak to może oznaczać, lub może być prostym iteratorem. Na przykład: przykład jako iterator:

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

Podobnie jak czeku:

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

edycja: edytowanej obejmuje zestawy zamiast list i ciągi

+0

Co to ma wspólnego z zestawami? –

+0

well Przypuszczam, że listę lub nawet ciąg można uznać za mające podobne właściwości do zestawu. Są zbiorem elementów. –

+1

Nie, zestawy mają dodatkowy warunek sprawdzania przechowalności, którego nie zawierają sekwencje. –

Powiązane problemy