36

ちゃんとした理由があるのはわかっていますが、どのような理由があるのか​​知りたいですか?

>>> print all([])
True

all() が iterable のすべての項目が「True」に評価されるかどうかをチェックすることを意図しており、空のリストが False に評価されることがわかっている場合

>>> bool([])
False

では、空のリストに対して all() が True を返すのはなぜでしょうか?

<編集>

私はすでにドキュメントを読み、実装を知っています

 def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

しかし、問題は、なぜそうしないのかということです。

def all(iterable):
    if not iterable:
        return False
    for element in iterable:
        if not element:
            return False
    return True

これには論理がありますか?完了したタスクのリストがある場合

today_todo_status = [task.status for task in my_todo if task.date == today]
can_i_go_home = all(today_todo_status)

わかりました。上記の架空の例では、タスクがない場合は本当に理にかなっているので、家に帰ることができます。

しかし、他のケースもあり、todo リストのために all() が作成されたとは思いません.. 笑

< /編集 >

4

7 に答える 7

37

これは、「S 内のすべての X について、X が真である」と表現されます。S が空の場合、X はありません。ただし、すべての X について、X が真であったため、真のステートメントは真のままです... X はまったくありません!

ここではロジックを使用して説明します。

2 つのセット A と B を考えます。ここで、A+B は 2 つのセットの結合です。

any(A+B) = True -> any(A) または any(B) = True の場合、any(A)=True または any(B)=True をアサートできません。

any(A+B) = False -> any(A) = False および any(B) = False の場合。

all(A+B) = True -> all(A)=True および all(B)=True の場合

all(A+B) = False -> all(A)=False または all(B)=False の場合、all(A)=False または all(B)=False のいずれかをアサートすることはできません。

B の代わりに、空のセット Ø を A に追加しましょう。A+Ø=A であるため、空のセットを追加しても all() または any() の値が変更されないようにロジックを作成したいと考えています。

any(A+Ø) = any(A) または any(Ø)

any(A) が True の場合、any(A+Ø) が True になり、any(A) が False の場合、any(A+Ø) が False になるように、any(Ø) は False でなければなりません。

all(A+Ø) = all(A) および all(Ø)

all(A) が True の場合、all(A+Ø) は True です。したがって、all(Ø) は True です。

于 2012-08-16T01:57:16.247 に答える
10

all()(「iterable のすべての要素が true の場合 (または iterable が空の場合)に True を返す」に記載されています) は、次と同等です。

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

要素がないため、ループをスキップして戻りTrueます。

于 2012-08-16T01:56:50.697 に答える
1

これは数学的論理に由来します。

「空集合の要素についてはすべて真です」( http://en.wikipedia.org/wiki/Empty_set )

http://en.wikipedia.org/wiki/Vacuous_truthも参照してください

于 2012-08-16T02:24:00.793 に答える
1

すべての要素が True であるためです。要素がない場合、「すべての要素は...何でも」と言うことができます

于 2012-08-16T01:56:58.247 に答える