Python: TypeError: 'int' object is not subscriptable
Python: TypeError: 'int' object is not subscriptable
我收到类型错误,但我不明白为什么。错误位于 c = t[i][0]
(根据调试器)。我有 3 个字符组(列表):g1
、g2
和 g3
,我试图通过减去键的 k1
、[=18= 来更改字符的索引] 或 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
谁能解释一下为什么会出现此错误以及如何解决?这不像我在那里使用 int
类型。调试器显示它是一个 str 类型,它在第 2 次迭代后中断。
PS google 没有帮助
PPS 我知道代码中有太多的重复。我这样做是为了在调试器中查看发生了什么。
更新:
Traceback (most recent call last):
File "/hometriplerotatie.py", line 56, in <module>
print(codeer('abcd', 2, 3, 1))
File "/home/triplerotatie.py", line 47, in codeer
text = rotate_left(text, l_text, k1, k2, k3)
File "/home/triplerotatie.py", line 9, in rotate_left
c = t[i][0]
TypeError: 'int' object is not subscriptable
错误在这里:
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'
。
您正在为每个 个人 元组建立索引:
c = t[i][0]
i
开始时为 0
,但您在每次循环迭代时递增它:
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:
已经给你每个单独的元组。
你的索引部分做错了。你的元组是一维的,所以你不能使用二维数组下标符号。
假设
t = ('a',0)
您应该使用 t[0]
或 t[1]
分别访问 a
和 0
。
希望对您有所帮助..:)
问题是 t 是一个元组,你访问元组中的元素就像一个列表。目前,您访问的元素类似于 2D 列表,考虑到您的列表会导致尝试对 char 进行索引。
for t in l_text: # t = tuple
c = t[i][0]
应该改为
for t in l_text: # t = tuple
c = t[0]
我收到类型错误,但我不明白为什么。错误位于 c = t[i][0]
(根据调试器)。我有 3 个字符组(列表):g1
、g2
和 g3
,我试图通过减去键的 k1
、[=18= 来更改字符的索引] 或 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
谁能解释一下为什么会出现此错误以及如何解决?这不像我在那里使用 int
类型。调试器显示它是一个 str 类型,它在第 2 次迭代后中断。
PS google 没有帮助 PPS 我知道代码中有太多的重复。我这样做是为了在调试器中查看发生了什么。
更新:
Traceback (most recent call last):
File "/hometriplerotatie.py", line 56, in <module>
print(codeer('abcd', 2, 3, 1))
File "/home/triplerotatie.py", line 47, in codeer
text = rotate_left(text, l_text, k1, k2, k3)
File "/home/triplerotatie.py", line 9, in rotate_left
c = t[i][0]
TypeError: 'int' object is not subscriptable
错误在这里:
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'
。
您正在为每个 个人 元组建立索引:
c = t[i][0]
i
开始时为 0
,但您在每次循环迭代时递增它:
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:
已经给你每个单独的元组。
你的索引部分做错了。你的元组是一维的,所以你不能使用二维数组下标符号。 假设
t = ('a',0)
您应该使用 t[0]
或 t[1]
分别访问 a
和 0
。
希望对您有所帮助..:)
问题是 t 是一个元组,你访问元组中的元素就像一个列表。目前,您访问的元素类似于 2D 列表,考虑到您的列表会导致尝试对 char 进行索引。
for t in l_text: # t = tuple
c = t[i][0]
应该改为
for t in l_text: # t = tuple
c = t[0]