2012-12-10 22 views
28

Tut dies, was ich denke, dass es tut? Es scheint mir ja. Ich bitte um Gewissheit.Testen der Gleichheit der drei Werte

if n[i] == n[i+1] == n[i+2]: 
    return True 

Sind diese gleich?

if n[i] == n[i+1] and n[i+1] == n[i+2]: 
    return True 
+2

Das ist richtig. –

+0

Duplizieren von: http://stackoverflow.com/questions/13792604/usage-of-the-operator-for-three-objects/13792615#13792615 –

Antwort

25

Es ist Äquivalent, aber nicht gleich, da Zugriffe nur einmal durchgeführt werden. Python Ketten relationalen Operatoren natürlich (einschließlich in und is).

Der einfachste Weg, um den kleinen Unterschied zu zeigen:

>>> print(1) == print(2) == print(3) 
1 
2 
3 
True 
>>> print(1) == print(2) and print(2) == print(3) 
1 
2 
2 
3 
True 
+3

Es ist erwähnenswert, sie sind nicht das gleiche, wie es möglich ist, ein zu ersinnen Szenario, in dem einer arbeitet und der andere fehlschlägt ('n' ist ein Objekt, das den Wert von' n [i + 1] 'nach einem Zugriff ändert). Edit: Ich habe in einem Beispiel den Unterschied editiert. –

3

ja Sie richtig sind ....

Sie auch

5 > x > 1 

oder

tun können
1 < x < 5 
6

Ja, allerdings beim Vergleich ns sind verkettet der gemeinsame Ausdruck wird einmal ausgewertet, wenn and es zweimal ausgewertet wird. In beiden Fällen wird der zweite Vergleich nicht, wenn der erste, der falsch ist, zB aus dem docs bewertet:

Vergleiche können beliebig verkettet werden, beispielsweise < x y < = z entspricht bis x < y und y < = z, außer dass y nur einmal ausgewertet wird (aber in beiden Fällen wird z überhaupt nicht ausgewertet, wenn x < y für falsch befunden wird).

2

Yep, bei der Interna Python die Vergleichsoperatoren kehrt noch wahr weder falsch, kehren sie stattdessen das Objekt ‚Vergleichsergebnis‘ (kann den Klassennamen nicht mehr erinnern, es war ganz in Vergangenheit), und diese Aufgabe stellt die _ lt _, _ gt _, _ eq _ etc etc Methoden und für das Endergebnis 'verantwortlich' werden (und die 'Vergleichsergebnis' wirft auf Wahr oder Falsch am Ende der Erklärung). Das ist eine Magie der semantischen Kontrolle, die Python Ihnen bietet :)

Verwandte Themen