Python IndexError:列表索引超出范围 - 2d列表迭代

时间:2015-08-28 06:33:17

标签: python list iteration turtle-graphics

尝试迭代Python中的以下2d列表,找到乌龟图形的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 个答案:

答案 0 :(得分:0)

编辑:

此外,似乎xpos实际上是您的数据集中的完整元素 - for xpos in data_set:,如果您可以这样做 -

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

同样在所有其他地方。

您似乎错误地将列表编入索引。当你这样做 -

data_set[[xpos][1]]

您实际上正在创建单个元素xpos的列表,然后从中访问其第二个元素(index - 1),它总是会出错。

这不是您在Python中索引2D列表的方式。您需要访问类似 -

list2d[xindex][yindex]

答案 1 :(得分:0)

让我们提取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)