[英]Python Index error using generator with yield
我正在运行这段代码,我从中得到了我想要的值,但还有一个IndexError: tuple index out of range
for line 12 和 18
import statistics as st
def squares(*args):
i = 0
val = []
fin = []
val = args
while True:
avg = (st.mean(val))
fin = (avg - val[i]) ** 2 # line 12
yield fin
i += 1
mylist = squares(3, 4, 5)
for x in mylist: # line 18
print(x)
结果:
1
0
1
Traceback (most recent call last):
File line 18, in <module>
for x in mylist:
File line 12, in squares
fin = (avg - val[i]) ** 2
IndexError: tuple index out of range
根据您的代码,您执行的一些变量和方法我认为您也可以更改。 就像这个例子一样。 我注释掉了您的旧代码,以便您可以看到更改和差异。
import statistics as st
def squares(*args):
#i = 0
#val = []
fin = []
val = args
for n in val:
avg = (st.mean(val))
fin = (avg - n) ** 2 # line 12, #val[i]
#i += 1
yield fin
mylist = squares(3, 4, 5)
for x in mylist: # line 18
print(x)
我可以在这里看到您正在尝试使用fin = (avg - val[i]) **
访问val
的每个值但是您也可以使用for loop
并且不需要i
变量作为索引。 同样@schwobaseggl 是正确的,您会收到错误IndexError: tuple index out of range
,因为您一直在incrementing
或adding
您的i
添加到您试图从val
变量中访问超出其长度的值的点。
您可以简化生成器 function:
import statistics as st
def squares(*args):
avg = st.mean(args)
for arg in args:
yield (avg - arg) ** 2
请注意,在您的原始文件中,您有一个永远不会break
的无限循环( while True
),并且会在i
访问的序列val
不增长时不断增加索引i
。 那总是一个等待发生的IndexError
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.