繁体   English   中英

Python 使用生成器产生索引错误

[英]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 ,因为您一直在incrementingadding您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM