我的程序使用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))
我只是不明白为什么会出现此错误,原因是默认情况下列表是用整数索引的吗? 有人可以向我解释吗?谢谢!
答案 0 :(得分:3)
您有两种方法可以做到:
$mysqli = new mysqli("localhost","database","username","password");
$sql = "SELECT * FROM `tableB`";
$statement = $mysqli->prepare($sql);
$statement->execute();
$result = $statement->get_result();
while($row = $result->fetch_object()) {
echo $row->book; //MyBook
echo $row->userID, //1
}
第二:
for i in range(len(lst)):
s += int(lst[i])
答案 1 :(得分: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
答案 2 :(得分:1)
i
是字符串,所以lst[i]
失败。
您可以使用lst[int(i)]
将其转换为int,但这并不是您真正想做的。有关解决方法,请参见Joshua's answer。