首页 > 解决方案 > 正则表达式列表中的整数总和

问题描述

使用从 re.findall() 创建的整数列表,我们如何为整数创建总和?

示例文件:

A number: 606
Another number could be 52 or 38
Another number below:
55

打印使用 RegEx 捕获创建的列表:

import re
fileHandle = open("sample.txt", "r")
for line in fileHandle:
    #RegEx: Match all ints anywhere in line
    num = re.findall("\d+", line)
    print(num)

输出:

['606']
['52', '38']
[]
['55']

标签: pythonregexlistcasting

解决方案


您必须将(嵌套)列表的项目从str转换为intsum您可以使用内置函数在单个嵌套生成器表达式中执行此操作:

>>> sum(int(x) for line in filehandle for x in re.findall(r"\d+", line))    
751

或者没有嵌套,使用read()来获取文件的全部内容(如果它不是太大):

>>> sum(int(x) for x in re.findall(r"\d+", filehandle.read()))             
751

或者使用map而不是生成器表达式:

>>> sum(map(int, re.findall(r"\d+", filehandle.read())))                   
751

或者,如果您想要每行的总和(map作为练习留给读者的版本):

>>> [sum(int(x) for x in re.findall(r"\d+", line)) for line in filehandle] 
[606, 90, 0, 55]

(当您在交互式 shell 中尝试这些时,请记住文件将在每个之后“用尽”,因此您必须在测试下一个之前重新打开文件。另请注意,使用\d+您可能会得到令人惊讶的结果,如果您的文件包含例如浮点数或 IP 地址。)


推荐阅读