gpt4 book ai didi

python - 将列表项转换为 int 并将它们相加的最有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:27 26 4
gpt4 key购买 nike

我正在做这样的事情来总结一行的一些元素:

for line in open(filename, 'r'):
big_list = line.strip().split(delim)
a = sum(int(float(item)) for item in big_list[start:end] if item)
# do some other stuff

这是用一个大文件逐行完成的,其中一些项目可能会丢失,即等于''。如果我使用上面的语句来计算 a,脚本会比没有它慢得多。有没有办法加快速度?

最佳答案

这没有经过测试,但凭直觉我希望跳过中间 float 转换会有所帮助。你想获取小数点左边的整数,所以我会尝试通过正则表达式直接这样做:

import re

pattern = re.compile("\d+")

然后用正则表达式匹配替换浮点解析:

sum(int(pattern.search(item).group(0)) for item in big_list[start:end] if item)

如果您不需要保留旧的十进制字符串,您还可以在构建 big_list 时即时获取这些字符串。例如,假设我们有行 "6.0,,1.2,3.0,"。我们可以得到这样的匹配:

delim = ","
pattern = re.compile("(\d+)\.\d+|" + re.escape(delim) + re.escape(delim) + "|$")

该模式的结果为:['6', '', '1', '3', ''],然后可以像往常一样对其进行切片和过滤无需浮点解析:

for line in open(filename, 'r'):
big_list = pattern.findall(line)
a = sum(int(item) for item in big_list[start:end] if item)

关于python - 将列表项转换为 int 并将它们相加的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com