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

Bastien Léonard picture Bastien Léonard · Jun 25, 2010 · Viewed 45.7k times · Source

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.

Answer

Jochen Ritzel picture Jochen Ritzel · Jun 25, 2010

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).