2012-07-31 62 views
7

我正在測試列表以查看它是否爲空。通常我使用len(list)== 0,而我隱約記得剛纔讀到的那個測試列表是否爲空的正確方法是它是True還是False。布爾測試在Python中的列表

所以我嘗試列表是False,並返回False。也許我想假設使用==?不然,那也返回了錯誤。列表爲True,返回false,列表== True。

現在我很困惑,所以我做了快速谷歌,並在最後:Best way to check if a list is empty

頂端回答是:

if not a: 
    print "List is empty" 

所以我四處搜尋一些和蟒蛇手動結束其中4.1狀態:

任何對象都可以測試真值,用於if或while條件或作爲以下布爾操作的操作數。以下值被認爲是false:

任何空序列,例如'',(),[]。

現在我很困惑。如果我測試一個列表就好像沒有列表一樣,它工作正常。但是,如果一個空列表是錯誤的,那麼爲什麼我不能做,如果列表是False或者列表== False?

感謝

回答

11

空列表是不假,但是當你把它轉換成一個布爾值,將其轉換爲False。同樣,對於類型的字典,元組,字符串等:

>>> [] == False 
False 
>>> bool([]) == False 
True 
>>> {} == False 
False 
>>> bool({}) == False 
True 

當你把東西在if條款的條件,它是用於測試if的布爾值。這就是爲什麼if someListif bool(someList)相同。同樣,not foo也不是布爾值,因此not []等於True。

+0

具體而言,調用[__nonzero__](http://docs.python.org/reference/datamodel.html#object.%5F%5Fnonzero%5F%5F)方法 – ernie 2012-07-31 03:41:28

0

將列表與False進行比較,測試列表的真相或虛假並不完全相同。空列表不等於False,但在布爾上下文中表現爲False

這裏的另一種方式來表達,這可能有助於這有道理:

print (bool([]) == False) # will print True 
print ([] == False) # will print False 
2

正如其他人所說,在python bool([]) == False。 python程序員經常利用的一件事是運算符andor不(必然)返回True/False。考慮以下幾點:

3 and 4 #returns 4 
0 and 8 #returns 0 -- This is short-circuit evaluation 
0 or 8 #returns 8 
True or 0 #returns True -- This is short-circuit evaluation 

[] or False #returns False 
False or [] #returns [] 

if聲明中會發生什麼情況是,條件得到上述評價,然後蟒蛇隱式調用bool的結果 - 所以,你可以把它看成:

if condition: 

是一樣的東西:

if bool(condition): 

就python而言。同樣,對於not操作:

not condition 

是一回事

not bool(condition) 
1

mylist is False手段 「被命名爲mylist完全相同的對象False對象?」

mylist == False手段 「是一個名爲mylist等於對象False

not mylist的意思是」 不叫mylist對象的行爲falsily?


這些都不是等價的:1 is not 1.01 == 1.0[] != Falsenot [] is True