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]