
On Thu, Jan 21, 2021 at 7:19 PM Chris Angelico <rosuav@gmail.com> wrote:
On Fri, Jan 22, 2021 at 11:10 AM Random832 <random832@fastmail.com> wrote:
On Thu, Jan 21, 2021, at 18:48, Chris Angelico wrote:
Note that slicing is NOT easy. The proposed semantics for a reversed enumeration would make slicing extremely odd.
What proposed semantics? You were the one who posted a pure-python implementation that didn't bother to implement slicing.
Ah, my bad. This thread started out on python-dev before migrating to -ideas, and I believe the proposed semantics may have been on one of the early -dev posts.
The proposal was, effectively, to be the same as enumerating, making a concrete list, and then reversing (only, without actually building the list, of course). So enumerate("abc") yields [(0,'a'),(1,'b'), (2,'c')], and iterating backwards should yield those same tuples in reverse order.
But if you take the reversed enumeration, iterate over it a bit, and then slice it, the semantics will be extremely bizarre.
It's easy enough to add slicing to your Enumerated class concept, though.
class Enumerated: def __init__(self, basis, indices=None): self.basis = basis self.indices = indices if indices is not None else range(len(basis)) def __getitem__(self, idx): if isinstance(idx, slice): return Enumerated(self.basis, indices=self.indices[idx]) else: return (self.indices[idx], self.basis[self.indices[idx]]) def __len__(self): return len(self.indices)
Yeah, I don't think that'll work if you slice more than once, especially with some iteration in between.
The precise semantics for mixing iteration and slicing are complex enough and variable enough that you may as well just go for a concrete list at that point.
Can you give an example of what you mean?--because I'm pretty sure that we're not talking about the same thing at all. If enumerate(some_sequence) returns a sequence view, iterating over that sequence view does not advance it—just like how DictViews are not altered by iteration. Same thing if reversed(some_sequence) returns a sequence view. So, reversed(enumerate("abc"))[2] would just be (0, 'a'). You're right that there are some minor incongruities. The only one I can think of off-hand is bool(enumerate(some_sequence)) would be false when the sequence is empty. As for candidates for sequence views, I'd like to see reversed and enumerate to start since I can remember having to cast to list many times and it would be convenient not to have to. From itertools, it would be useful for thecombinatorics operators (combinations, permutations, product, etc.) to be sequence views. In fact, there are convenience functions for looking them up by index in more-itertools as this comes up a lot (at least it did for me back when I did contests).
ChrisA _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-leave@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/VTSZZK... Code of Conduct: http://python.org/psf/codeofconduct/
--
--- You received this message because you are subscribed to a topic in the Google Groups "python-ideas" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/python-ideas/3wGART2ECXQ/unsubscribe. To unsubscribe from this group and all its topics, send an email to python-ideas+unsubscribe@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python-ideas/CAPTjJmpboVPni3FimaTh%3DNo_GB....