-2

我的程序使用库中的findall函数re对文件中的所有数字求和:

fh=open(fname)
lst=re.findall('[0-9]+',fh.read())

findall应该返回一个列表吧?所以我应该像这样循环遍历它:

for i in lst :
 s=s+int(lst[i])

但我收到回溯错误,上面写着:

    s=s+int(lst[i])
TypeError: list indices must be integers or slices, not str

现在如果我使用它就可以了range()

for i in range(len(lst))

我只是不明白为什么我得到这个错误原因列表默认用整数索引对吗?有人可以向我解释吗?谢谢你 !

4

3 回答 3

3

你有两种方法可以做到:

for i in range(len(lst)):
 s += int(lst[i])

第二:

for i in lst:
 s += int(i)
于 2020-04-12T17:08:01.230 回答
1

for i in lst:已经一个接一个地取出元素,您不需要索引列表。所以试试:

for i in lst :
    s=s+int(i)

当您尝试将元素从列表中删除时,for i in lst:可以完成这项工作。例如:

lst = [1,2,3,4]
for i in lst:
    print(i)

给出输出:

1
2
3
4
于 2020-04-12T17:04:54.960 回答
1

i是一个字符串,所以lst[i]失败。

您可以将其转换为 int with lst[int(i)],但这并不是您真正想要做的。请参阅约书亚的答案以了解如何解决它。

于 2020-04-12T17:13:00.863 回答