Python:TypeError:'int'对象不可订阅

时间:2015-02-24 13:23:46

标签: python list tuples typeerror

我得到一个TypeError,我不明白为什么。错误发生在c = t[i][0](根据调试器)。我有3个字符组(列表):g1g2g3我试图通过减去键k1,{{1}来更改字符串索引来自索引的{或k2。我现在用于测试的内容:

k3

这是代码:

text = 'abcd'

l_text = [('a', 0), ('b', 1), ('c', 2), ('d', 3)]

k1, k2, k3 = 2, 3, 1

有人可以解释我为什么会收到此错误,我该如何解决?这不像我在那里使用def rotate_left(text, l_text, k1, k2, k3): i = 0 newstr = [None]*len(text) for t in l_text: # t = tuple c = t[i][0] if c in g1: # c = char l = int(l_text[i][1]) # l = index of the char in the list if l - k1 < 0: newstr[l%len(text)-k1] = l_text[i][0] else: newstr[l-k1] = l_text[i][0] elif c in g2: l = l_text[i][1] # l = index of the char in the list if l - k1 < 0: newstr[l%len(text)-k2] = l_text[i][0] else: newstr[l-k2] = l_text[i][0] else: l = l_text[i][1] # l = index of the char in the list if l - k1 < 0: newstr[l%len(text)-k3] = l_text[i][0] else: newstr[l-k3] = l_text[i][0] i += 1 return newstr 类型。调试器显示它是str类型,并在第二次迭代后中断。

PS谷歌没有帮助 PPS我知道代码中有太多的重复。我这样做是为了在调试器中看到发生了什么。

更新:

int

4 个答案:

答案 0 :(得分:4)

您正在索引每个个人元组:

c = t[i][0] 

i0开头,但是每次循环迭代都会增加它:

i += 1

for循环将t绑定到来自l_text的每个元组,因此首先t绑定到('a', 0),然后绑定到('b', 1)等等。

首先,您要查看的('a', 0)[0][0] 'a'[0]'a'。您查看('b', 1)[1][0]的下一次迭代1[0]会引发您的异常,因为整数不是序列。

您需要删除i;你 需要在这里保留一个正在运行的索引,因为for t in l_text:已经为你提供每个单独的元组

答案 1 :(得分:3)

错误在于:

l_text = [('a', 0), ('b', 1), ('c', 2), ('d', 3)]

...

for t in l_text: # t = tuple
    # t is a tuple of 2 items: ('a', 0)
    c = t[i][0] # Breaks when i == 1

我想你想要:

c = t[0]

第一次围绕循环没有中断,因为i == 0时,t[i]'a',然后t[i][0]也是'a'

答案 2 :(得分:1)

你正在做错误的索引部分。你的元组是1维的,所以你不能使用2-D数组下标符号。 假设

t = ('a',0)

您应该使用t[0]t[1]分别访问a0

希望它有所帮助.. :)

答案 3 :(得分:1)

问题是t是一个元组,你可以访问像列表一样的元组中的元素。目前,您可以访问像2D列表这样的元素,如果您的列表导致尝试索引char,则会显示这些元素。

for t in l_text: # t = tuple
    c = t[i][0]

应改为

for t in l_text: # t = tuple
    c = t[0]