繁体   English   中英

python枚举函数获取索引错误

[英]python enumerate function getting index error

我不明白为什么下面的枚举。 它返回一个索引错误。 因为我不需要枚举的索引,所以我使用了下栏。 据我了解 y 不是索引。 对? 我不记得下杠的想法从何而来,但我过去使用过它并取得了不错的效果。 这里没有那么多。

PanelName = ['A1','A2','A3']
PnlCkts = [[1,3,5],[1,4,5],[1,2,4]]

for x in range(len(PanelName)):
    for _,y in enumerate(PnlCkts[x]):
        sql = ("SELECT Ckt, EObjName, Description, Location,"
            + " EObjType, PDF, Spec, "
            + "DwgName FROM EObjDump WHERE Panel = '"
            + PanelName[x]
            + "' AND Ckt = "
            + str(PnlCkts[x][y])
            + ";"
            )

您正在使这变得比需要的更复杂。

如果不需要索引,则不需要使用enumerate(PnlCkts[x]) ,直接迭代PnlCtks[x]即可。

那么你也不需要在下面使用PnlCkts[x][y]y已经是PnlCkts[x]一个元素。

for x in range(len(PanelName)):
    for y in PnlCkts[x]:
        sql = ("SELECT Ckt, EObjName, Description, Location,"
            + " EObjType, PDF, Spec, "
            + "DwgName FROM EObjDump WHERE Panel = '"
            + PanelName[x]
            + "' AND Ckt = "
            + str(y)
            + ";"
            )

但是,您实际上可以使用enumeratePanelName进行迭代,因为在这里您确实需要索引和值:

for x, panel in enumerate(PanelName):
    for y in PnlCkts[x]:
        sql = ("SELECT Ckt, EObjName, Description, Location,"
            + " EObjType, PDF, Spec, "
            + "DwgName FROM EObjDump WHERE Panel = '"
            + panel
            + "' AND Ckt = "
            + str(y)
            + ";"
            )

这是您可能想要了解的更高级的技术:由于您首先处理PanelName[0]PnlCkts[0] ,然后处理PanelName[1]PnlCkts[1] ,依此类推,您可以使用zip作为惯用语并行迭代两个列表的方法:

for panel, ckts in zip(PanelName, PnlCkts):
    for y in ckts:  # I have no idea what the names mean so I invent one here
        sql = ("SELECT Ckt, EObjName, Description, Location,"
            + " EObjType, PDF, Spec, "
            + "DwgName FROM EObjDump WHERE Panel = '"
            + panel
            + "' AND Ckt = "
            + str(y)
            + ";"
            )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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