基本上我希望这段代码产生列表的元素0并更新列表,以便下次它将产生下一个元素。相反,我得到了这个错误:
"TypeError: 'NoneType' object has no attribute '__getitem__' "
import random
def deterministicNumber():
return next(gener())
def gener():
listy = [10,12,14,16,18,20]
while True:
listy = listy[1:].append(listy[0])
print listy
yield listy[0]
return
答案 0 :(得分:3)
listy = listy[1:].append(listy[0])
此行指定listy = None
,因为list.append
方法在适当的位置运行并返回None
。然后,在循环的下一次迭代中,TypeError
是由访问None[1:].append(None[0])
对于列表中的一次性迭代器,您只需使用:
gener = iter([10,12,14,16,18,20])
答案 1 :(得分:2)
看起来你想要一个在列表中反复循环的迭代器。
您最好使用itertools模块中的函数cycle执行此任务:
>>> import itertools
>>> gener = itertools.cycle([10,12,14,16,18,20])
>>> def deterministicNumber(it):
return next(it)
>>> for _ in range(10):
print(deterministicNumber(gener))
10
12
14
16
18
20
10
12
14
16
答案 2 :(得分:0)
无需更新列表。
def gener():
listy = [10,12,14,16,18,20]
for item in listy:
yield item
答案 3 :(得分:0)
听起来你想永远归还这些数字。
def listy(array):
i = 0
while 1:
yield array[i % len(array)]
i += 1
for l in listy(['a', 'b', 'c']):
print l
如果你只想做一个循环:
def listy(array):
i = 0
while i < len(array):
yield array[i]
i += 1
for l in listy(['d', 'e', 'f']):
print l