8

リストが空かどうかをテストしていました。通常、私は len(list) == 0 を使用しますが、リストが空かどうかをテストする正しい方法は、それが True か False かどうかということを少し前に読んだことを漠然と思い出しました。

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

今、私は混乱しているので、簡単なグーグルを実行して、リストが空かどうかを確認する最良の方法にたどり着きました

一番の答えは次のとおりです。

if not a:
    print "List is empty"

だから私はもう少し検索して、4.1が述べているpythonマニュアルに行き着きます:

if または while 条件で使用するため、または以下のブール演算のオペランドとして使用するために、任意のオブジェクトを真偽値についてテストできます。次の値は false と見なされます。

''、()、[] などの空のシーケンス。

今、私は混乱しています。リストではないかのようにリストをテストすると、正常に動作します。しかし、空のリストが false の場合、list が False の場合、または list == False の場合だけを実行できないのはなぜですか?

ありがとう

4

4 に答える 4

14

空のリストはFalseではありませんが、ブール値に変換するとFalseに変換されます。同様に、dict、タプル、文字列などの場合:

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

句の条件に何かを入れると、のifテストに使用されるのはそのブール値ですif。そのためif someList、はと同じif bool(someList)です。同様にnot foo、ブール値はそうではないので、not []Trueに等しくなります。

于 2012-07-31T02:38:11.773 に答える
2

他の人が言ったように、 python bool([]) == False. Python プログラマーによって頻繁に悪用されることの 1 つは、演算子andおよびorが (必ずしも) 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いうと、条件が上記のように評価され、Python が暗黙的boolに結果を呼び出すということです。したがって、次のように考えることができます。

if condition:

は次と同じです:

if bool(condition):

パイソンに関する限り。notオペレーターについても同様です。

not condition

と同じことです

not bool(condition)
于 2012-07-31T02:47:45.853 に答える
1

mylist is Falseは、「オブジェクトの名前が とmylist まったく同じFalse?」を意味します。

mylist == Falsemylist 「名前が等しい オブジェクトはFalse?

not mylist「という名前のオブジェクトはmylist誤って動作しますか? 」という意味です。


これらはどれも同等ではありません: 1 is not 1.0but1 == 1.0[] != Falsebut not [] is True.

于 2012-07-31T02:57:19.187 に答える
0

リストをと比較しFalse、リストの真偽をテストすることはまったく同じではありません。空のリストはと等しくありませんが、ブールコンテキストのようにFalse動作します。False

これが理にかなっていると言う別の言い方があります:

print (bool([]) == False) # will print True
print ([] == False) # will print False
于 2012-07-31T02:39:27.427 に答える