2016-03-02 136 views
0

我正在处理一个问题,以汇总文本文件中的所有数字。我解决了它,但我知道我可以更多地整合代码。正则表达式,总结

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

为什么python的人希望所有的东西都在一行上?它不会提高可读性或效率(在大多数情况下)。就像他们说的,如果它没有被破坏,不要修复它。 –

+0

@ cricket_007试着尽我所能学习! –

回答

1

你大部分都在那里。您可以删除括号(以sum发电机表达没有中间list),你可以使用map(理想PY3 map避免中间list)为简洁/性能(只有PERF的增益,因为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())))