Why Python built in "all" function returns True for empty iterables?
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------
Take control of your privacy with Proton's trusted, Swiss-based, secure services.
Choose what you need and safeguard your digital life:
Mail: https://go.getproton.me/SH1CU
VPN: https://go.getproton.me/SH1DI
Password Manager: https://go.getproton.me/SH1DJ
Drive: https://go.getproton.me/SH1CT
Music by Eric Matyas
https://www.soundimage.org
Track title: The World Wide Mind
--
Chapters
00:00 Why Python Built In &Quot;All&Quot; Function Returns True For Empty Iterables?
01:04 Answer 1 Score 11
01:24 Answer 2 Score 1
01:34 Accepted Answer Score 36
02:50 Answer 4 Score 2
03:04 Thank you
--
Full question
https://stackoverflow.com/questions/1197...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python
#avk47
ACCEPTED ANSWER
Score 36
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 Ø 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+Ø=A.
any(A+Ø) = any(A) or any(Ø)
any(Ø) must be False, so that if any(A) is True, any(A+Ø) is True, and if any(A) is False, any(A+Ø) is False.
all(A+Ø) = all(A) and all(Ø)
if all(A) is True, all(A+Ø) is True. Therefore, all(Ø) is True.
ANSWER 2
Score 11
all() (documented to "Return True if all elements of the iterable are true (or if the iterable is empty).") is equivalent to the following:
def all(iterable):
for element in iterable:
if not element:
return False
return True
Since there are no elements, it will skip the loop and return True.
ANSWER 3
Score 2
This comes from the mathematical logic.
"everything is true of the elements of the empty set" (http://en.wikipedia.org/wiki/Empty_set)
ANSWER 4
Score 1
Because all elements are True. When there are no elements, you can say that 'all elements are ... anything'