列表中所有内容的总和

时间:2016-06-22 17:58:55

标签: python regex

我从大文件中的句子中提取数字。例句(在文件finalsum.txt中):

the cat in the 42 hat and the cow 1772 jumps over the moon.

然后我使用正则表达式创建一个列表,我想在整个文件中加入1772 + 42,创建所有数字的最终总和。

这是我目前的代码:

import re
import string
fname = raw_input('Enter file name: ')

try:
    if len(fname) < 1: fname = "finalsum.txt"
    handle = open(fname, 'r')
except:
    print 'Cannot open file:', fname

counts = dict()
numlist = list()
for line in handle:
    line = line.rstrip()
    x = re.findall('([0-9]+)', line)
    if len(x) > 0:
        result = map(int, x)
        numlist.append(result)
        print numlist

我知道这段代码可以用线条理解写成两行,但我只是在学习。谢谢!

2 个答案:

答案 0 :(得分:0)

检查一下:

import re

line = 'the cat in the 42 hat and the cow 1772 jumps over the moon 11 11 11'
y = re.findall('([0-9]+)', line)
print sum([int(z) for z in y])

它不会创建嵌套列表,而是在将其转换为整数后添加给定列表中的所有值。您可以管理一个临时变量,该变量将存储最终总和,并将当前行中所有整数的总和添加到此临时变量中。

像这样:

answer = 0
for line in handle:
    line = line.rstrip()
    x = re.findall('([0-9]+)', line)
    if len(x) > 0:
        answer += sum([int(z) for z in x])
print answer

答案 1 :(得分:0)

您不应该附加列表,而是使用+运算符加入列表。

for line in handle:
    line = line.rstrip()
    x = re.findall('([0-9]+)', line)
    if len(x) > 0:
        result = map(int, x)
        numlist+=result
        #numlist.append(result) 
        print numlist

print sum(numlist)

<强>插图:

>>> a = [1,2]
>>> b = [2,3]
>>> c = [4,5]
>>> a.append(b)
>>> a
[1, 2, [2, 3]]
>>> print b + c
[2, 3, 4, 5]

如您所见,append()+加入两个列表的末尾追加列表对象。