<div dir="ltr"><div class="gmail_default" style=""><font face="arial, helvetica, sans-serif">FWIW, here's something for working with memory-efficient sequences (and generators), which should get more features in the future:</font></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace">pip install git+<a href="https://github.com/k7hoven/views">https://github.com/k7hoven/views</a></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style=""><font face="arial, helvetica, sans-serif">Some examples of what it does:</font></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default"><div class="gmail_default"><font face="monospace, monospace">py> from views import seq</font></div><div class="gmail_default"><font face="monospace, monospace">py> seq[::range(3), None, ::"abc", "Hi!"]</font></div><div class="gmail_default"><font face="monospace, monospace"><sequence view 8: [0, 1, 2, None, 'a', 'b', 'c', 'Hi!'] ></font></div><div class="gmail_default"><font face="monospace, monospace">py> seq[::range(100)]</font></div><div class="gmail_default"><font face="monospace, monospace"><sequence view 100: [0, 1, 2, 3, 4, ..., 96, 97, 98, 99] ></font></div><div class="gmail_default"><br></div><div class="gmail_default"><span style="font-family:monospace,monospace">py> from views import seq, gen</span><br></div><div class="gmail_default"><font face="monospace, monospace">py> seq.chain([1, 2, 3], [4, 5, 6])</font></div><div class="gmail_default"><font face="monospace, monospace"><sequence view 6: [1, 2, 3, 4, 5, 6] ></font></div><div class="gmail_default"><font face="monospace, monospace">py> list(gen.chain([1, 2, 3], [4, 5, 6]))</font></div><div class="gmail_default"><font face="monospace, monospace">[1, 2, 3, 4, 5, 6]</font></div><div class="gmail_default"><br></div><div class="gmail_default"><font face="monospace, monospace">py> from views import range</font></div><div class="gmail_default"><font face="monospace, monospace">py> range(5)</font></div><div class="gmail_default"><font face="monospace, monospace">range(0, ..., 4)</font></div><div class="gmail_default"><font face="monospace, monospace">py> range(1, 10, 3)</font></div><div class="gmail_default"><font face="monospace, monospace">range(1, ..., 7, step=3)</font></div><div class="gmail_default"><font face="monospace, monospace">py> range(1, ..., 5)</font></div><div class="gmail_default"><font face="monospace, monospace">range(1, ..., 5)</font></div><div class="gmail_default"><font face="monospace, monospace">py> range(1, 3, ..., 10)</font></div><div class="gmail_default"><font face="monospace, monospace">range(1, ..., 9, step=2)</font></div><div class="gmail_default"><br></div><div class="gmail_default">Sequences are perhaps more interesting than the generators, which are just there, because I don't want to implicitly try to convert generators/iterators into sequences. I do intend to add at least one *explicit* mechanism.</div><div class="gmail_default"><br></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">Much of this is thread-safe, but the assumption in general is that one does not modify the original sequences. One problem is that there's no way to efficiently check if the originals have been mutated. Currently it just sometimes checks that the lengths match. </font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">This approach can also be a big performance boost because it avoids copying stuff around in memory etc. However, many possible optimizations have not been implemented yet, so there's overhead that can be significant for small sequences. For instance, itertools could be used to optimize some features.<br></font></div><div class="gmail_default"><br></div><div class="gmail_default"><font face="monospace, monospace">––Koos</font></div><div class="gmail_default"><font face="monospace, monospace"><br></font></div></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 21, 2017 at 2:35 PM, Serhiy Storchaka <span dir="ltr"><<a href="mailto:storchaka@gmail.com" target="_blank">storchaka@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">21.11.17 13:53, Kirill Balunov пише:<span class="gmail-"><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
If I can not copy at Python level, I can 'tee' when 'star_pos' is reached.<br>
</blockquote>
<br></span>
And tee() uses a real RAM for saving items.<div class="gmail-HOEnZb"><div class="gmail-h5"><br>
<br>
______________________________<wbr>_________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/codeofco<wbr>nduct/</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">+ Koos Zevenhoven + <a href="http://twitter.com/k7hoven" target="_blank">http://twitter.com/k7hoven</a> +</div>
</div></div>