Подтвердить что ты не робот

Более эффективные способы получить n-й элемент из unsubscriptable iterable

Иногда итерабельность может не быть индексируемой. Произнесите возврат из itertools.permutations:

ps = permutations(range(10), 10)
print ps[1000]

Python будет жаловаться, что 'itertools.permutations' object is not subscriptable

Конечно, для получения n-го элемента можно выполнить next() на n раз. Просто интересно, есть ли лучшие способы сделать это?

4b9b3361

Ответ 1

Просто используйте рецепт nth itertools

>>> from itertools import permutations, islice
>>> def nth(iterable, n, default=None):
        "Returns the nth item or a default value"
        return next(islice(iterable, n, None), default)

>>> print nth(permutations(range(10), 10), 1000)
(0, 1, 2, 4, 6, 5, 8, 9, 3, 7)

Ответ 2

Более читаемое решение:

next(x for i,x in enumerate(ps) if i==1000)