[Python-ideas] Adding a new function "zip_flat" to itertools (Re: Rewriting the "roundrobin" recipe in the itertools documentation)
Terry Reedy
tjreedy at udel.edu
Mon Nov 20 18:00:32 EST 2017
On 11/20/2017 4:57 PM, Steven D'Aprano wrote:
> On Mon, Nov 20, 2017 at 12:15:50PM -0500, Terry Reedy wrote:
>
>>> Your version truncates the results to A B C instead of A B C D E as the
>>> itertools recipe gives.
>>
>> This is due to an off-by-1 error which I corrected 3 hours later in a
>> follow-up post, repeated below.
>
> Ah, I missed that, thanks.
>
>>> def roundrobin(*iterables):
>>> "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
>>> nexts = cycle(iter(it).__next__ for it in iterables)
>>> for reduced_len in reversed(range(1, len(iterables))):
>>
>> Make that 0 rather than 1 for start value.
>
> Is there a reason for calling reversed() instead of reversing the order
> of range in the first place?
>
> range(len(iterables)-1, -1, -1)
Readability. Accurately and automatically reversing ranges was one of
the use cases motivating the addition of 'reversed'. Ranges have a
__reversed__ method which returns a iterator for a reversed range.
>>> reversed(range(0, n))
<range_iterator object at 0x000001FC6BBD5030>
>>> list(reversed(range(0, n))) == list(iter(range(n-1, -1, -1)))
True
--
Terry Jan Reedy
More information about the Python-ideas
mailing list