Python IndexError: индекс списка вне диапазона - 2-я итерация списка

Попытка перебрать следующий 2D-список в Python, чтобы найти координаты x,y для графики черепах.

data_set_01 = [['A', 1, 0, 'N'], ['A', 2, 1, 'E'], ['A', 3, 2, 'S'], ['A', 4, 3, 'W']]

Иметь следующий код:

def draw_icons(data_set):
for xpos in data_set: #find x co-ordinates
    if data_set[[xpos][1]] == 0:
        xpos = -450
    elif data_set[[0][1]] == 1:
        xpos = -300
    elif data_set[[xpos][1]] == 2:
        xpos = -150
    elif data_set[[xpos][1]] == 3:
        xpos = 0
    elif data_set[[xpos][1]] == 4:
        xpos = 150
    elif data_set[[xpos][1]] == 5:
        xpos = 300

for ypos in data_set: #find y co-ordinates
    if data_set[[ypos][2]] == 0:
        ypos = -300
    elif data_set[[ypos][2]] == 1:
        ypos = -150
    elif data_set[[ypos][2]] == 2:
        ypos = 0
    elif data_set[[ypos][2]] == 3:
        ypos = 150

goto(xpos,ypos)
pendown()
setheading(90)
commonwealth_logo()

Получите следующую ошибку:

if data_set[[xpos][1]] == 0:
IndexError: list index out of range

Не уверен, что я здесь делаю не так.

2 ответа

Давайте извлекать xpos & ypos вместе и рассчитаем позицию:

data_set_01 = [['A', 1, 0, 'N'], ['A', 2, 1, 'E'], ['A', 3, 2, 'S'], ['A', 4, 3, 'W']]

def draw_icons(data_set):
    for _, xpos, ypos, letter in data_set:

        x = (xpos - 3) * 150
        y = (ypos - 2) * 150

        goto(x, y)
        pendown()
        setheading(90)
        write(letter, align='center')  # just for testing

draw_icons(data_set_01)

РЕДАКТИРОВАТЬ:

Кроме того, похоже, xpos на самом деле полный элемент в вашем data_set, так как вы делаете - for xpos in data_set:, если вы так можете просто сделать -

xpos[1] #instead of `data_set[[xpos][1]]` .

Аналогично во всех других местах.


Вы, кажется, неправильно индексируете свои списки. Когда вы делаете -

data_set[[xpos][1]]

Вы на самом деле создаете список из одного элемента xpos и затем доступ к его 2-му элементу (index - 1) из него всегда будет с ошибкой.

Это не то, как вы индексируете 2D список в Python. Вам нужно получить доступ, как -

list2d[xindex][yindex]
Другие вопросы по тегам