<p dir="ltr">Consuming the iterator is *necessary* to get the last item. There's no way around that.</p>
<p dir="ltr">Obviously, you could itertools.tee() it first if you don't mind the cache space. But there cannot be a generic "jump to the end" of an iterator without being destructive.</p>
<div class="gmail_extra"><br><div class="gmail_quote">On Oct 23, 2016 8:43 AM, "Steven D'Aprano" <<a href="mailto:steve@pearwood.info">steve@pearwood.info</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sun, Oct 23, 2016 at 08:37:07AM -0700, David Mertz wrote:<br>
> Of course. But if you want last(), why not just spell the utility function<br>
> as I did? I.e. as a function:<br>
><br>
>     def last(it):<br>
>          for item in it:<br>
>              pass<br>
>         return item<br>
><br>
> That works fine for any iteratable (including a list, array, etc), whether<br>
> or not it's a reduction/accumulation.<br>
<br>
That's no good, because it consumes the iterator. Yes, you get<br>
the last value, but you actually needed to do work on all the<br>
previous values too.<br>
<br>
<br>
--<br>
Steve<br>
______________________________<wbr>_________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/<wbr>codeofconduct/</a><br>
</blockquote></div></div>