Ваше значение x
является объектом-генератором, то есть Iterator
: оно генерирует значения по порядку, так как они запрашиваются циклом for
или путем вызова next(x)
.
Вы пытаетесь получить к нему доступ, как к списку или другому типу Sequence
, который позволяет получить доступ к произвольным элементам по индексу как x[p + 1]
.
Если вы хотите посмотреть значения из выходных данных вашего генератора по индексу, вы можете преобразовать их в список:
x = list(x)
Это решает вашу проблему и подходит в большинстве случаев. Однако для этого требуется генерировать и сохранять все значения одновременно, поэтому может произойти сбой, если вы имеете дело с очень длинным или бесконечным списком значений или значения очень велики.
Если вам просто нужно одно значение из генератора, вы можете вместо этого использовать itertools.islice(x, p)
, чтобы отбросить первые p
значения, а затем next(...)
, чтобы получить то, что вам нужно. Это избавляет от необходимости хранить несколько элементов в памяти или вычислять значения сверх того, который вы ищете.
import itertools
result = next(itertools.islice(x, p))