Элегантный способ пропустить элементы в многократном
У меня есть большая итерация, на самом деле, большая итерация, заданная:
itertools.permutations(range(10))
Я хотел бы получить доступ к миллионному элементу. У меня уже есть проблема, решаемая разными способами.
Приведение итерации к списку и получение 1000000-го элемента:
return list(permutations(range(10)))[999999]
Элементы, пропускаемые вручную до 999999:
p = permutations(range(10))
for i in xrange(999999): p.next()
return p.next()
Вручную пропуская элементы v2:
p = permutations(range(10))
for i, element in enumerate(p):
if i == 999999:
return element
Использование islice из itertools:
return islice(permutations(range(10)), 999999, 1000000).next()
Но я все еще не чувствую, что ни один из них не является элегантным способом сделать это на питоне. Первый вариант слишком дорогой, он требует вычисления всей итерации, чтобы получить доступ к одному элементу. Если я не ошибаюсь, islice внутренне выполняет те же вычисления, которые я только что сделал в методе 2, и почти точно так же, как 3-й, возможно, он имеет еще более избыточные операции.
Итак, мне просто любопытно, интересно, есть ли в python какой-то другой способ доступа к конкретному элементу итерируемого или, по крайней мере, пропустить первые элементы, более элегантным способом, или мне просто нужно использовать один из вышеперечисленных.