Причина, по которой вам нужно использовать i[0]
, заключается в том, что get()
- это генератор, который возвращает list
размера 1 каждый раз, когда он вызывается. Итак, ваш код i[0] for i in get()
такой же, как i[0] for i in ([0],[0],[0])
. Причина, по которой ваш код работает, заключается в том, что i[0]
получает первый элемент из возвращенного элемента, который сам по себе является list [0]
.
Из вашего вопроса я понял, что вы хотите получить i for i in [0,0,0]
. Как упоминалось в других ответах, это может быть достигнуто путем замены вашего генератора на int
0
вместо list
[0]
. Вы можете увидеть результат работы генератора в следующем примере кода:
>>> for i in get():
... print("i={} and i[0]={}".format(i, i[0]))
...
i=[0] and i[0]=0
i=[0] and i[0]=0
i=[0] and i[0]=0
Как видите, ваш генератор возвращает [0]
каждую итерацию, и именно поэтому вы должны использовать i[0]
, чтобы получить первый элемент каждого списка.
Кроме того, поскольку r
- это всего лишь результаты генератора, вы можете упростить это, выполнив следующее:
>>> def gen():
... for i in range(3):
... yield 0
...
>>> r = list(gen())
>>> r
[0, 0, 0]