2012-12-10 26 views
6

Powiel możliwe:
Why does “[] == False” evaluate to False when “if not []” succeeds?Pusta lista jest równa Brak lub nie?

Jestem nowy python jak na potrójnego operatora pytona

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

Oczekuję na poniżej wyjścia kodu jako [], bo [ ] nie równa się Brak

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

zarzuty poprawne, jeśli się mylę

Dzięki HEMA

+3

znaleźć w dokumentacji [Truth Wartość Testy] (http://docs.python.org/2/ library/stdtypes.html # true-value-testing). –

+0

Lepsze odpowiedzi na https://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty – zerocog

Odpowiedz

10

Pusta lista, [] jest nie równa None.

Jednak można go wycenić na na False - co oznacza, że ​​jego "wartość prawdy" to False. (Patrz źródeł w komentarzach pozostawione na PO).

Dlatego

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

Najłatwiejszym sposobem jest "[]! = False' ale" bool ([]) == Fałsz'. –

+1

@ Legatware To prawda, jest to najbardziej zwięzły sposób, ale myślę, że nowicjusz Python może mieć problemy z podążaniem. – jdotjdot

+1

Och, w rzeczy samej, nie sugeruję, żebyś usunął swoje doskonałe wyjaśnienie, po prostu mówiąc inaczej. –

0

None jest jedynym wystąpienie NoneType i jest zwykle używany do oznaczania braku wartości. To, co dzieje się w twoim przykładzie, polega na tym, że pusta lista, podjęta w kontekście logicznym, ocenia na False, warunek się nie powiedzie, więc gałąź else zostanie wykonana. Interpreter robi coś na wzór:

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

Oto kolejny przydatny dyskusja dotycząca None: not None test in Python

Powiązane problemy