2012-12-10 10 views
6

Mögliche Duplizieren:
Why does “[] == False” evaluate to False when “if not []” succeeds?Leere Liste ist gleich Keine oder nicht?

Ich bin neu in Python als pro ternäre Operator von Python

>>> 'true' if True else 'false' true 
    true 

i für unter Code-Ausgabe erwarten bin als [], weil [ ] nicht gleich zu Keine

>>> a=[] 
>>> a==None 
False 
>>> a if a else None 
None 

Bitten richtig, wenn ich falsch bin

Dank hema

+3

Lesen Sie die Dokumentation für [Wahrheitswert Testing] (http://docs.python.org/2/ library/stdtypes.html # Wahrheitswert-Testen). –

+0

Bessere Antworten unter https://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty – zerocog

Antwort

10

Die leere Liste, [], nicht gleich None ist.

Es kann jedoch bewerten zu False - das heißt, seine "Wahrheit" Wert ist False. (Siehe die Quellen in den Kommentaren auf dem OP links.)

Wegen dieses

>>> [] == False 
False 
>>> if []: 
...  print "true!" 
... else: 
...  print "false!" 
false! 
+12

Der einfachste Weg, es zu sagen ist '[]! = False' aber' bool ([]) == Falsch. –

+1

@Lattyware Richtig, es ist der prägnanteste Weg, aber ich würde denken, dass ein Python-Neuling Schwierigkeiten haben könnte, zu folgen. – jdotjdot

+1

Oh, in der Tat, ich schlage nicht vor, Sie entfernen Ihre hervorragende Erklärung, nur um es anders auszudrücken. –

0

None ist die einzige Instanz der NoneType und in der Regel wird verwendet, ohne Wert zu bedeuten. Was in Ihrem Beispiel passiert, ist, dass die leere Liste, die im booleschen Kontext genommen wurde, False ist, die Bedingung fehlschlägt, also wird der else-Zweig ausgeführt. Der Dolmetscher macht etwas entlang der Linien von:

>>> a if a else None 
    [] if [] else None 
    [] if False else None 
None 

Hier ist eine weitere nützliche Diskussion über None: not None test in Python

Verwandte Themen