1

それは正常な動作ですか?

answer=all(c=='false True answer?' for c in [])
# answer = True

そのような行を使用するために、空のリストで「すべて」によるチェック値で False が必要な場合は問題ありませんか?:

answer=all(set([c=='a' for c in []]) or [False,])

次の場合は問題ありません。

answer=all(set([c=='a' for c in ['a','a']]) or [False,])
answer=all(set([c=='a' for c in ['a','b']]) or [False,])

次のような逆ロジックを使用することにしました。

bad_answer=bool([c for c in ['a','b'] if c!='a'])
4

4 に答える 4

3
In [2]: all([])
Out[2]: True

はい。

c == '...'for c in []アイテムを許可しないため、評価されることはありません。リスト内包表記は、 inが空になると[]すぐに評価されます。iterablefor c in iterable

于 2013-03-18T10:51:14.703 に答える
3

空のリストのすべての要素が何らかの値に等しいかどうかを確認しています。リストには値がないため、技術的にはすべての値他の値と等しくなります。

>>> all([])
True

all式のいずれかが、、またはそれ以外の場合Falseに評価された場合に戻ります。いずれの条件も真ではないため(そもそも条件がないため)、を返します。FalseTrueallTrue

于 2013-03-18T10:51:23.630 に答える
2

all()として文書化されています

iterable のすべての要素が true の場合 (または iterable が空の場合)、True を返します。

空のリストを反復処理するため、ジェネレータ式c=='false True answer?' for c in []は空です。何もないため、比較は行われませんin []

于 2013-03-18T10:52:40.990 に答える
1

allTrue空のシーケンスを操作する場合、常に評価されます。そうです、それは正常です。

于 2013-03-18T10:52:12.127 に答える