定义用于访问列表的Python代码时的TypeError

时间:2015-08-26 11:31:26

标签: python python-2.7 typeerror

data_set_01=[['A', A, 2, 'D'], ['A', T, 7, 'Y'], ['A', 2, 5, 'X']]
def draw_icons(data_set):
    for value in range(len(data_set)):
        if value[0] == "A" :
            icon1() ## Draw icon1.
        elif value[0] == "B":
            icon2() ## Draws icon2.
        elif value[0] == "C":
            icon3() ## Draws icon3.
        elif value[0] == "D":
            icon4() ## Draws icon4.
draw_icons(data_set_01)
done()

我试图定义一个利用数据集(列表中的列表)的函数,其中如果列表中的第一个变量,列表是" A"运行预定义代码(在这种情况下,它们应该都是" icon1()"。但它只是提出了一个

TypeError: 'int' object has no attribute '__getitem__'

2 个答案:

答案 0 :(得分:6)

您正在循环range()

for value in range(len(data_set)):

所以value被设置为该范围内的整数,从0开始。您不能对该整数使用索引,因此value[0]不起作用。

直接遍历data_set以获取嵌套列表:

for value in data_set:

现在value绑定到每个嵌套列表,value[0]将获得其中的第一个元素。

您可以使用字典将字母映射到函数,而不是使用if语句:

def draw_icons(data_set):
    icons = {'A': icon1, 'B': icon2, 'C': icon3, 'D': icon4}
    for value in data_set:
        if value[0] in icons:
            icons[value[0]]()

icons存储函数对象,从字典中检索它们可以调用这些函数。

答案 1 :(得分:2)

您正在迭代包含整数值的范围对象,因此您无法将它们编入索引(如错误所示)。

我想你想迭代data_set

for value in data_set: