Fix Python – One-liner to check whether an iterator yields at least one element?

Question

Asked By – Bastien Léonard

Currently I’m doing this:

try:
    something = iterator.next()
    # ...
except StopIteration:
    # ...

But I would like an expression that I can place inside a simple if statement.
Is there anything built-in which would make this code look less clumsy?

any() returns False if an iterable is empty, but it will potentially iterate over all the items if it’s not.
I only need it to check the first item.


Someone asks what I’m trying to do.
I have written a function which executes an SQL query and yields its results.
Sometimes when I call this function I just want to know if the query returned anything and make a decision based on that.

Now we will see solution for issue: One-liner to check whether an iterator yields at least one element?


Answer

any won’t go beyond the first element if it’s True. In case the iterator yields something false-ish you can write any(True for _ in iterator).

This question is answered By – Jochen Ritzel

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0