私は次のpythonコードを参照しています
all(a==2 for a in my_list)
my_list のすべての要素が 2 の場合、上記のコードは True を返すと予想しますが、my_list を空にして次のように実行すると、
my_list = []
all(a==2 for a in my_list)
True も返します。私はこの行動に混乱しています。my_list に値 2 の要素がないため、False を返すことは想定されていませんか?
私は次のpythonコードを参照しています
all(a==2 for a in my_list)
my_list のすべての要素が 2 の場合、上記のコードは True を返すと予想しますが、my_list を空にして次のように実行すると、
my_list = []
all(a==2 for a in my_list)
True も返します。私はこの行動に混乱しています。my_list に値 2 の要素がないため、False を返すことは想定されていませんか?
簡単に確認できるように、空のリストに適用される「すべて」は「空虚に真」です。
>>> all([])
True
同様に、「0 = 1 の場合、月は正方形である」は true です。より一般的には、「すべての P は Q である」 - P がない場合、「すべての x について、x が P の場合、x は Q である」と形式的に捉えることができるため、ステートメントは真と見なされます。最終的に、条件付き論理演算子 (if-then) が前件 (最初の句) が False の場合は常に True と評価されるため、これらは true になります。「if False then True」は True と評価されます。「if A then B」は「(not A) or B」と同等であることを思い出してください。
2022年1 月追加all
および Python リストの場合、 のブール値all(my_list)
は の値です
"for all items `x` in `my_list`, the value of `x` is truthy".
が空の場合my_list
、その値は True です。繰り返しますが、「すべてのために」でありall
、存在を主張するものではありません。
Python 疑似コードでは、all
おおよそ次のように機能します。
val = True
for x in my_list:
if not x:
val = False
break
# assert val == all(my_list)
の再帰的な定義を考えてみましょうall
:
def all(L):
if L:
return L[0] and all(L[1:])
else:
???
のすべての要素L
が true の場合、最初の項目L
が true であり、それall(L[1:])
が true であることが true でなければなりません。これは、複数の項目があるリストの場合は簡単にわかりますが、項目が1 つのリストの場合はどうでしょう。明らかに、唯一の項目が true の場合、すべての項目が true ですが、その場合、再帰的な定式化はどのように機能するのでしょうか? true であると定義all([])
すると、アルゴリズムが機能します。
別の見方をすると、真でないL
リストについてall(L)
は、真でない要素を少なくとも 1 つ特定できるはずです。ただし、 when が空の場合はそのようなことはありません。a
a
L
L
all([])
に対しても同じ引数が機能しany
ます。が true の場合any(L)
、少なくとも 1 つの要素L
が true であることを識別できるはずです。しかし、空のリストはできないので、それは偽L
であると言えます。any([])
の再帰的な実装はany
これをバックアップします:
def any(L):
if L:
return L[0] or any(L[1:])
else:
return False
が true の場合L[0]
、再帰呼び出しを行うことなく true を返すことができるため、L[0]
is が false であると仮定します。基本ケースに到達する唯一の方法は、L
true の要素がない場合です。したがって、到達した場合は戻る必要がありFalse
ます。