列表索引超出范围,python生成器错误

2024-09-29 19:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于此:

class DataFromBls:
    """this is a spitout of data in BLS dump"""

    def __init__(self, dataSource, yearOfData, inflationAdjusted):
        self.dataSource = dataSource
        self.yearOfData = yearOfData
        self.inflationAdjusted = inflationAdjusted

    def printData(self):
        for value in self.dataSource:
            yield self.dataSource[value]

假设x = DataFromBls([2, 3, 5, 6, 6, 7], 2010, "yes")

然后假设把以下内容交给了口译员

^{pr2}$

然后我让翻译吐出5,6,7,然后给我一个回溯ndexError:列表索引超出范围

我不明白它是怎么超出范围的或者为什么只有5到7超出范围

谢谢你


Tags: ofinselfdataisvaluedefthis
2条回答

下一个元素是6,而{}超出边界(最后一个元素是self.dataSource[5])。在

你是想写:

def printData(self):
    for value in self.dataSource:
        yield value

是吗?在

让我们仔细看看以下循环的每个迭代的外观:

for value in self.dataSource:
    yield self.dataSource[value]

假设self.dataSource是列表[2, 3, 5, 6, 6, 7]

  • 第一次迭代:value将是2self.dataSource[2]将是第三个元素,或者{}
  • 第二次迭代:value将是3self.dataSource[3]将是第四个元素,或者{}
  • 第三次迭代:value将是5self.dataSource[5]将是第6个元素,或者{}
  • 第四次迭代:value将是6self.dataSource[6]导致{}

你的问题是你直接在列表中的元素上循环,而不是索引。您要执行以下操作之一:

^{pr2}$

或者。。。在

for i in range(len(self.dataSource)):
    yield self.dataSource[i]

显然,第一种方法是首选的,第二种方法只是说明了如果您需要的话,如何获得索引。在

请注意,在Python3.3及更高版本中,您只需使用yield from self.dataSource来获得与for value in self.dataSource: yield value相同的行为。在

相关问题 更多 >

    热门问题