Why Python built in “all” function returns True for empty iterables?

后端 未结 7 827
萌比男神i
萌比男神i 2020-12-05 02:08

I know it has a good reason, but I want to know what reason?

>>> print all([])
True

If all() is intended to check if every item on

7条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-05 02:49

    This is expressed as "For all X in S, X is true". If S is empty, there are no X. However, the truth statement remains True, because for all X, X was true... there just aren't any X!

    Here is a explanation using logic.

    Consider two sets A and B where A+B is the union of the two sets.

    If any(A+B) = True -> any(A) or any(B) = True but we cannot assert either any(A)=True or any(B)=True.

    If any(A+B) = False -> any(A) = False and any(B) = False.

    If all(A+B) = True -> all(A)=True and all(B)=True

    if all(A+B) = False -> all(A)=False or all(B)=False but we cannot assert either all(A)=False or all(B)=False.

    Now instead of B, let's add the empty set 0 to A. We want to come up logic such that adding the empty set does not change the values of all() or any(), since A+0=A.

    any(A+0) = any(A) or any(0)

    any(0) must be False, so that if any(A) is True, any(A+0) is True, and if any(A) is False, any(A+0) is False.

    all(A+0) = all(A) and all(0)

    if all(A) is True, all(A+0) is True. Therefore, all(0) is True.

提交回复
热议问题