2012-07-31 8 views
7

リストが空であるかどうかをテストしていました。通常はlen(list)== 0を使用しています。リストが空であるかどうかをテストする正しい方法は、TrueかFalseかを少し前から読んでいたことをぼんやりと覚えていました。ブール値をPythonでテストする

私はlistを試してみましたが、Falseで、Falseが返されました。多分私は==を使用していると思いますか? いいえ、それもfalseを返しました。 listはTrue、falseはlist == Trueと同様に返されます。

私は簡単にGoogleをして、で終わるので、今、私は混乱している:Best way to check if a list is empty

トップの答えは次のとおりです。

if not a: 
    print "List is empty" 

だから私はいくつかのより多くの周りを検索し、Pythonのマニュアルに終わりますwhere 4.1:

すべてのオブジェクトは、真偽値、if条件またはw​​hile条件、または以下のブール演算のオペランドとして使用するためにテストできます。次の値はfalseとみなされます。

空のシーケンス(たとえば、 '、()、[])。

今私は単純に混乱しています。私がリストをリストとしてテストすると、うまく動作します。しかし、空のリストが偽である場合、リストがFalseの場合、またはリスト== Falseの場合はどうしてできませんか?

おかげ

答えて

11

空のリストは偽ではありませんが、ブール値に変換するとき、それはFalseに変換します。同様にdicts、タプル、文字列などのために:

>>> [] == 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

0

リストをFalseと比較し、リストの真偽をテストすることは全く同じことではありません。空のリストはFalseではありませんが、ブール値のコンテキストではFalseのように動作します。パイソンbool([]) == Falseで、他のよう

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

が言った:

は、ここでは、このメイクセンスを助けるかもしれないそれを言うための別の方法です。 Pythonプログラマーによって頻繁に悪用されることの1つは、演算子andorがTrue/Falseを(必然的に)返さないということです。考えてみましょう以下:if声明の中で何が起こる

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 [] 

条件は、上記のように評価して、Pythonが暗黙のうちに結果にbool呼び出してしまうことです - ですから、と考えることができます。

if condition: 

は次のものと同じです:

if bool(condition): 

までは、Pythonに関する限りです。同様にnotオペレータ用:

not condition 

not bool(condition) 
1

mylist is Falseと同じことは、 "mylistという名前のオブジェクトがFalseとまったく同じオブジェクトているのですか?" を意味しています

mylist == False手段は "False

not mylistを意味するmylist等しいという名前のオブジェクトである" という名前のオブジェクトは、mylist falsily振る舞うのでしょうか?これらの


いずれも同等ではない:1 is not 1.0しかし1 == 1.0[] != Falseけどnot [] is True

関連する問題