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 <[email protected]> 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 -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/[email protected]/message/D52MPKLIN4VEXBOCKVMTWAK66MAOEINY/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/RO5PFRG4PCHFQGQPEJIXP5TGUF3KSZYO/ Code of Conduct: http://python.org/psf/codeofconduct/
