值错误无法索引
Value Error cannot index
text_file = ['Cats','Dogs','Frogs','(pass)', 'ants']
final_l = [[1], [2], [3], [5]]
final_dict = {'Dogs': [1], 'Cats': [1], 'Frogs': [1], 'ants': [1]}
for k, v in final_dict.items():
for sl in final_l:
for num in sl:
if text_file[int(num)] == k:
sl.append(k)
sl.append(v)
print(final_l)
Traceback (most recent call last):
File "/Users/Luan/Desktop/1.py", line 9, in <module>
if text_file[int(num)] == k:
ValueError: invalid literal for int() with base 10: 'Frogs'
好迷茫。哪里出错了???为什么它一直给我这个值错误?为什么我不能索引?
我想这样说:
final_l = [[1, "Cats", [1]], [2, "Dogs", [1]], [3, "Frogs", [1]], [5, "ants", [1]]]
导致错误的原因是 text_file 是一个列表,您必须将整数传递给该列表的引用和索引。您传递的 num 正在迭代一个列表,该列表在您对其进行操作时正在更改。当您将 'Frongs' 和“[1]”附加到列表时,num 会迭代这些值,然后您尝试引用 text_file 的索引 'Frogs'。这会导致值错误。
您可以使用:
import copy
for num in copy.copy(sl):
作为一种可能的解决方案,尽管我对你的最终 objective 是什么感到很困惑。
这里的主要问题是您在遍历列表的同时向其附加新值,这会导致您出错,并且因为您碰巧使用了附加到此列表的值 sl
但这是不正确的用于索引(如 'Frogs'),所以我的明显建议是为此创建一个新列表:
>>> new = []
>>> for k,v in final_dict.items():
for i,sl in enumerate(final_l):
for num in sl:
if text_file[num-1] == k:
new.append(sl+[k,v])
>>> new
[[3, 'Frogs', [1]], [5, 'ants', [1]], [2, 'Dogs', [1]], [1, 'Cats', [1]]]
请注意,列表索引从 0 开始。
text_file = ['Cats','Dogs','Frogs','(pass)', 'ants']
final_l = [[1], [2], [3], [5]]
final_dict = {'Dogs': [1], 'Cats': [1], 'Frogs': [1], 'ants': [1]}
for k, v in final_dict.items():
for sl in final_l:
for num in sl:
if text_file[int(num)] == k:
sl.append(k)
sl.append(v)
print(final_l)
Traceback (most recent call last):
File "/Users/Luan/Desktop/1.py", line 9, in <module>
if text_file[int(num)] == k:
ValueError: invalid literal for int() with base 10: 'Frogs'
好迷茫。哪里出错了???为什么它一直给我这个值错误?为什么我不能索引? 我想这样说:
final_l = [[1, "Cats", [1]], [2, "Dogs", [1]], [3, "Frogs", [1]], [5, "ants", [1]]]
导致错误的原因是 text_file 是一个列表,您必须将整数传递给该列表的引用和索引。您传递的 num 正在迭代一个列表,该列表在您对其进行操作时正在更改。当您将 'Frongs' 和“[1]”附加到列表时,num 会迭代这些值,然后您尝试引用 text_file 的索引 'Frogs'。这会导致值错误。
您可以使用:
import copy
for num in copy.copy(sl):
作为一种可能的解决方案,尽管我对你的最终 objective 是什么感到很困惑。
这里的主要问题是您在遍历列表的同时向其附加新值,这会导致您出错,并且因为您碰巧使用了附加到此列表的值 sl
但这是不正确的用于索引(如 'Frogs'),所以我的明显建议是为此创建一个新列表:
>>> new = []
>>> for k,v in final_dict.items():
for i,sl in enumerate(final_l):
for num in sl:
if text_file[num-1] == k:
new.append(sl+[k,v])
>>> new
[[3, 'Frogs', [1]], [5, 'ants', [1]], [2, 'Dogs', [1]], [1, 'Cats', [1]]]
请注意,列表索引从 0 开始。