あなたは、行ごとにそれを行うあなたの出力リスト1桁以上の数字のためのパターン"\d+"
を利用し、拡張findall
を呼び出すことができます。
import re
import urllib2
data = urllib2.urlopen("http://python-data.dr-chuck.net/regex_sum_179860.txt")
r = re.compile("\d+")
l = []
for line in data:
l.extend(map(int,r.findall(line)))
出力:
を
[3524, 9968, 6177, 3133, 6508, 7940, 3738, 1112, 6179, 4570, 6127, 9150, 9883, 418, 3538, 2992, 8527, 1150, 2049, 2834, 2630, 3840, 2638, 3800, 9144, 5866, 6742, 588, 6918, 7802, 8229, 7947, 8992, 1339,
2119, 846, 3820, 4070, 9356, 9708, 3238, 9380, 5572, 9491, 3038,
7434, 7771, 288, 8632, 3962, 9136, 8106, 7295, 3699, 4136, 3459, 8120,
6018, 8963, 5779, 3635, 3984, 4850, 9633, 2588, 7631, 9591, 1067,
7182, 1301, 8041, 1361, 5425, 8326, 7094, 8155, 2581, 7199, 6125, 42]
str.isdigit
:
l = []
for line in data:
l.extend(map(int,(w for w in line.split() if w.isdigit())))
あなただけの数字をsum
したい場合は、すべてですべての数値を格納する必要はありません。
print(sum(sum(map(int,(w for w in line.split() if w.isdigit()))) for line in data))
出力:
435239
または使用正規表現:
print(sum(sum(map(int,r.findall(line))) for line in data))
P robablyあなたのケースでは関係ないが、あなたはpython2を使用して、任意の中間のリストを避けたかった場合は、itertools.imap
を使用することができます。
from itertools import imap
print(sum(sum(imap(int,r.findall(line))) for line in data))
あなたのループ? –
リンクをチェックアウトすることはできますが、数字のほとんどは空白で区切ります – Kelvinlimjk