2012-12-10 63 views
6

可能重複:
Why does 「[] == False」 evaluate to False when 「if not []」 succeeds?空列表等於None還是不是?

我相信新的Python作爲每蟒的三元運算

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

我正在下面的代碼輸出期望如[]因爲[ ]不等於無

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

認罪正確的,如果我錯了,

感謝 HEMA

+3

參見[真值測試]的文檔(http://docs.python.org/2/庫/ stdtypes.html#真值測試)。 –

+0

更好的答案在https://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty – zerocog

回答

10

空的列表,[],是等於None

然而,它評估爲False - 也就是說,它的「真實性」值是False。 (參見在留在OP註釋的源。)

正因爲如此,

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

最簡單的方法是'[]!= False'但是'布爾([])== False'。 –

+1

@Lattyware不錯,這是最簡潔的方式,但我認爲Python新手可能會遇到麻煩。 – jdotjdot

+1

哦,的確,我並不是建議你刪除你的優秀解釋,只是換一種方式。 –

0

NoneNoneType的唯一實例,通常用來表示不存在的值。你的例子中發生的事情是,在布爾上下文中得到的空列表的計算結果爲False,條件失敗,所以else分支被執行。解釋器裏面的線沿線的東西:

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

下面是關於None另一個有用的討論:not None test in Python

相關問題