Самый чистый способ получить последний элемент из итератора Python - PullRequest
95 голосов
/ 26 января 2010

Какой лучший способ получить последний элемент из итератора в Python 2.6? Например, скажите

my_iter = iter(range(5))

Какой самый короткий / самый чистый способ получения 4 из my_iter?

Я мог бы сделать это, но это не очень эффективно:

[x for x in my_iter][-1]

Ответы [ 14 ]

0 голосов
/ 01 июня 2019

В качестве альтернативы для бесконечных итераторов вы можете использовать:

from itertools import islice 
last = list(islice(iterator(), 1000))[-1] # where 1000 is number of samples 

Я думал, что это будет медленнее, чем deque, но это так же быстро и на самом деле быстрее, чем для метода цикла (как-то)

0 голосов
/ 17 мая 2019

Вопрос в том, чтобы получить последний элемент итератора, но если ваш итератор создан путем применения условий к последовательности, то обратный можно использовать для поиска «первого» обратной последовательности, только просматривая нужные элементы , применяя обратную последовательность к самой последовательности.

Придуманный пример,

>>> seq = list(range(10))
>>> last_even = next(_ for _ in reversed(seq) if _ % 2 == 0)
>>> last_even
8
0 голосов
/ 24 октября 2017

Я бы просто использовал next(reversed(myiter))

0 голосов
/ 29 июня 2010

Вопрос неправильный и может привести только к ответу, который является сложным и неэффективным. Чтобы получить итератор, вы, конечно, начинаете с чего-то итеративного, что в большинстве случаев предлагает более прямой способ доступа к последнему элементу.

Как только вы создаете итератор из итерируемого, вы застреваете в процессе прохождения элементов, потому что это единственное, что обеспечивает итерируемое.

Таким образом, самый эффективный и понятный способ - это не создавать итератор, а использовать собственные методы доступа итерируемого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...