繁体   English   中英

IndexError:列表索引超出范围 - 有

[英]IndexError: list index out of range - having

我有以下列表称为行:

[[[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]),但我不知道如何让它运行。 我感谢所有有用的建议。

看起来您想从每个非常内部的列表中提取前 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]
list_xy = [(i[0][0], i[0][1]) for i in row]

暂无
暂无

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

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