2016-03-02 134 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())))