IndexError: список индексов вне диапазона - наличие - PullRequest
0 голосов
/ 23 марта 2020

У меня есть следующий список с именем 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]), но я не знаю, как его запустить. Я ценю все полезные предложения.

Ответы [ 2 ]

1 голос
/ 23 марта 2020

выглядит так, как будто вы хотите извлечь первые 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]
0 голосов
/ 23 марта 2020
list_xy = [(i[0][0], i[0][1]) for i in row]
...