[Python-ideas] Function to return first(or last) true value from list

Steven D'Aprano steve at pearwood.info
Wed Feb 19 00:01:10 CET 2014


On Tue, Feb 18, 2014 at 04:25:28PM -0600, Ryan Gonzalez wrote:
> It isn't uncommon to try and get either the first or the last True value
> from a list. 

I'm not sure that I've ever wanted to do either. If I've ever wanted the 
first true value, it was so uncommon I've forgotten. But I'm pretty 
confident I've never wanted the *last* true value. That would be a 
strange thing to do.


> In Python 2, you'd do this:
> 
> next((x for x in mylist if x))

That works fine in Python 3 too.


> And, in Python 3, thanks to filter returning an iterator, you'd do this:
> 
> next(filter(bool,mylist))
> 
> It still is pretty common. Common enough to make it aggravating to write a
> function to do that nearly every time.

But you aren't writing a function. It's a simple, trivial, one-line 
operation, a single expression. Not every trivial one-line operation 
needs to be a function. Just write "next(filter(bool, mylist))" 
in-place, where you want it to appear. It's only a couple of characters 
longer than "itertools.first(mylist)", and is one less thing to 
memorize.


[...]
> Stuff that's open to lots of debate:
> 
>    - Names. They're not very creative; I know.
>    - Builtin or itertools. I'm personally leaning towards the latter at the
>    moment.

You missed the most important question: whether or not this is worth 
doing at all.



-- 
Steven


More information about the Python-ideas mailing list