any(), all() and empty iterable
John O'Hagan
research at johnohagan.com
Tue Apr 14 13:54:14 EDT 2009
On Tue, 14 Apr 2009, Carl Banks wrote:
> On Apr 12, 10:45 am, Tim Chase <python.l... at tim.thechases.com> wrote:
> > > That's why you ask "Do you have any books called 'Robinson Crusoe'?"
> > > rather than "Are all your books called 'Robinson Crusoe'?".
> >
> > Mu. If I don't have any books..."Have you stopped beating all
> > your wives?" The question makes the presumption that I have
> > books (or that you've been beating your wife).
>
> A previous time we had this dicussion, I pointed out that natural
> language comparisons are questionable since in natural langauge you
> are not confined to two answers. The valid answer to the above
> question could be "I don't have any books", neither yes nor no. The
> closest thing to that you can get in Python is to raise an exception.
>
[...]
Agreed; having absorbed the answers to my original question, I now understand
why all('Robinson Crusoe' in books for books in []) - or with any object in
place of the string, or indeed just all([]) - doesn't return False, but,
vacuous truth notwithstanding (and it's apparently a not uncontroversial
notion), it doesn't seem fair to return True without so much as a
how's-your-father. ;)
An exception, or at least a specific mention of the case of empty iterables in
the docs (as Tim Chase suggested), would have baffled me less than my program
telling me that the same items were both ubiquitous and entirely absent from
a list of sets!
Of course, it's possible people out there depend on the present behaviour.
Regards,
John
More information about the Python-list
mailing list