我正在解决一个问题,即对文本文件中的所有数字求和。我已经解决了,但我知道我可以更多地整合代码。
x = re.findall('[0-9]+',opened.read())
x = [int(i) for i in x]
print sum(x)
我想做这样的事,但我不知道:
print sum([int(i) for i in re.findall('[0-9]+',opened.read())])
谢谢!
答案 0 :(得分:1)
你大部分都在那里。您可以删除括号(sum
生成器表达式而不使用中间list
),您可以使用map
(理想情况下为Py3 map
来避免中间list
})为了简洁/性能(只有一个性能增益,因为int
是一个用C实现的内置函数;通常map
更慢):
# genexpr
print sum(int(i) for i in re.findall(r'\d+', opened.read()))
# Or with finditer to avoid intermediate list
print sum(int(m.group()) for m in re.finditer(r'\d+', opened.read()))
# map
from future_builtins import map # Only on Py2
print sum(map(int, re.findall(r'\d+', opened.read())))