For ideas like this it is best to discuss them on python-ideas.

I'll also mention that this idea has been brought up at least twice before:
search for threads about itertools and single() or first() (if I remember
correctly).

On Mon, Jul 27, 2020 at 12:07 PM Noam Yorav-Raphael <noamr...@gmail.com>
wrote:

> Hi,
>
> There's a simple function that I use many times, and I think may be a good
> fit to be added to itertools. A function that gets an iterator, and if it
> has exactly one element returns it, and otherwise raises an exception. This
> is very useful for cases where I do some sort of query that I expect to get
> exactly one result, and I want an exception to be raised if I'm wrong. For
> example:
>
> jack = one(p for p in people if p.id == '1234')
>
> sqlalchemy already has such a function for queries:
> https://docs.sqlalchemy.org/en/13/orm/query.html#sqlalchemy.orm.query.Query.one
>
> This is my implementation:
>
> def one(iterable):
>     it = iter(iterable)
>     try:
>         r = next(it)
>     except StopIteration:
>         raise ValueError("Iterator is empty")
>     try:
>         next(it)
>     except StopIteration:
>         return r
>     else:
>         raise ValueError("Iterator has more than one item")
>
> What do you think?
>
> Thanks,
> Noam
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/D52MPKLIN4VEXBOCKVMTWAK66MAOEINY/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/RO5PFRG4PCHFQGQPEJIXP5TGUF3KSZYO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to