On Tue, 28 Jul 2020 at 15:16, Brett Cannon <br...@python.org> wrote:

> 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).
>
I think "first" even passed "general approval'   last time around (about 1
month ago) -  but I can't recall if someone
took the responsibility of carrying that forward.

>
> 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/
>
_______________________________________________
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/257F5YVGORDSDKMTGGX7FAQKHSNHA32I/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to