【问题标题】:IndexError: list index out of range - havingIndexError:列表索引超出范围 - 有
【发布时间】:2020-03-23 11:17:03
【问题描述】:

我有一个名为 row 的列表:

[[[463, 100, 77, 9]], [[41, 418, 121, 175], [168, 419, 170, 176], [344, 421, 106, 175], [456, 422, 59, 175], [521, 423, 80, 174], [607, 424, 221, 176], [834, 427, 108, 174], [948, 428, 141, 174]], [[40, 601, 1046, 74]], [[40, 675, 119, 41], [167, 676, 80, 41], [255, 677, 80, 40], [343, 678, 104, 40], [520, 679, 78, 40], [455, 679, 57, 40], [606, 680, 219, 42], [833, 682, 106, 41], [947, 683, 138, 41], [851, 684, 37, 7]], [[39, 724, 120, 41], [166, 725, 81, 41], [342, 726, 105, 41], [254, 726, 81, 41], [454, 727, 58, 41], [519, 728, 79, 40], [605, 729, 219, 41], [833, 731, 105, 40], [966, 732, 119, 41], [946, 732, 16, 39], [850, 733, 38, 7]] ...]

现在我想总是提取第一个和第二个值。如您所见,列表中的某些元素只有一个子列表(如第一个元素),而其他元素有 8 个或更多元素。当我尝试使用以下代码遍历它时:

list_xy = []
for r in range(len(row)):
    for i in range(len(row[i])):
        list_xy.append((row[i][j][0], row[i][j][1]))

弹出这个错误:

Traceback (most recent call last):
  File "/Users/Desktop/tempCodeRunnerFile.py", line 190, in <module>
    list_xy.append((row[i][j][0], row[i][j][1]))
IndexError: list index out of range

我的假设是它会弹出,因为我在第一个子列表中只有一个元素(即 [463,100,77,9]),但我不知道如何让它运行。感谢所有有用的建议。

【问题讨论】:

    标签: python list iteration


    【解决方案1】:

    看起来您想从每个非常内部的列表中提取前 2 个元素,但您的错误假设是您在第一级和第二级讨厌的列表中拥有相同数量的列表,您可以使用以下方法进行修复:

    list_xy = []
    for r in row:
        for l in r:
            list_xy.extend(l[:2])
    

    或者更好的是,您可以使用列表推导:

    [e for r in row for l in r for e in l[:2]]
    

    输出:

    [463, 100, 41, 418, 168, 419, 344, 421, 456, 422, 521, 423, 607, 424, 834, 427, 948, 428, 40, 601, 40, 675, 167, 676, 255, 677, 343, 678, 520, 679, 455, 679, 606, 680, 833, 682, 947, 683, 851, 684, 39, 724, 166, 725, 342, 726, 254, 726, 454, 727, 519, 728, 605, 729, 833, 731, 966, 732, 946, 732, 850, 733]
    

    【讨论】:

      【解决方案2】:
      list_xy = [(i[0][0], i[0][1]) for i in row]
      

      【讨论】:

        猜你喜欢
        • 2011-10-31
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多