On Tue, Oct 5, 2021 at 9:46 AM Erik Demaine <[email protected]> wrote:
> Of course, the universal way to get the
> first item from an iterable x is
>
> item = next(iter(x))
>
> I can't say this is particularly readable, but it is functional and fast.
I think we can add `itertools.first()` for this idiom, and
`itertools.last()` for `next(iter(reversed(x)))` idiom.
>
> Given the dictionary order guarantee from Python 3.7, adding indexing
> (__getitem__) to dict views seems natural. The potential catch is that (I
> think) it would require linear time to access an item in the middle, because
> you need to count the dummy elements. But accessing [i] and [-i] should be
> doable in O(|i|) time.
It is not true. They are O(n) where n is the maximum dict size.
>
> Python is also full of operations that take linear time to do: list.insert(0,
> x), list.pop(0), list.index(), etc. But it may be that __getitem__ takes
> constant time on all built-in data structures, and the apparent symmetry but
> very different performance between dict()[i] and list()[i] might be confusing.
> That said, I really just want d[0] and d[-1], which is when these are fast.
They are not first. Since `next(iter(d))` is O(n), following code is O(n^2)
```
while d:
del d[next(iter(d))]
```
Making list is much faster than it. Following code is O(n).
```
for k in list(d):
del d[k]
```
>
> I found some related discussion in
> https://mail.python.org/archives/list/[email protected]/thread/QVTGZD6USSC34D4IJG76UPKZRXBBB4MM/
> but not this exact idea.
What is difference between your idea and previsous discussion?
--
Inada Naoki <[email protected]>
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/PHJONYONXXJ5Y6Z76NIORHLC2C6WKH6U/
Code of Conduct: http://python.org/psf/codeofconduct/