Python如何使用sum()对列表内字符串格式的数字求和
解答
完全可以用sum()直接实现,不需要手动写循环初始化变量累加,核心是配合生成器表达式把切片里的字符串先转成整数再求和。
具体写法
你代码里total的赋值直接写这行即可:
total = sum(int(vote) for vote in infocandidato[3:])
完整可运行代码
顺便修正你原代码里两个小问题:一是append行末尾多写了一个右括号的语法错误,二是直接open文件没有关闭的资源泄漏问题,推荐用with上下文管理器自动处理文件资源:
with open("votacion.txt", "r", encoding="UTF-8") as data: distrito17 = [] for infocandidato in data: infocandidato = infocandidato.split() total = sum(int(vote) for vote in infocandidato[3:]) distrito17.append((infocandidato[:3], total)) return distrito17
补充说明
- 你印象里的
sum(for i in ...)写法本质就是生成器表达式作为sum()的参数:当生成器表达式是函数的唯一入参时,不需要额外给生成器加圆括号,直接写在sum()的括号内就符合语法规范。 - 不要为了省事写成
sum([int(vote) for vote in infocandidato[3:]]):这种列表推导式的写法会先生成一个临时列表存储所有转换后的整数,白白占用额外内存,直接传生成器表达式是更高效的写法,和你手写for循环累加的执行效率基本一致,没有额外开销。 - 这个写法的逻辑和你之前手写的逐元素转int累加完全等价,计算结果没有任何差异。
内容的提问来源于stack exchange,提问作者Adaxil
相关产品推荐
相关产品推荐

