我有一个这样的列表:
a = ['1 MB', '2 MB']
我想总结 a 中的所有元素。
我想我首先必须创建整数列表并使用 sum() 函数。我怎样才能做到这一点?
使用内置split
将数字与字符串的其余部分分开
>>> a = ['1 MB', '2 MB']
>>> sum([int(s.split(' ')[0]) for s in a])
3
s.split(' ')
创建列表['1', 'MB']
或者使用生成器表达式来避免列表推导创建的不需要的列表:
>>> a = ['1 MB', '2 MB']
>>> sum(int(s.split(' ')[0]) for s in a)
3
假设所有元素都以 结尾' MB'
,您可以这样做:
sum(map(int, (x[:-3] for x in a)))
分解:
(x[:-3] for x in a)
获取字符串的最后三个字符以外的所有字符。map(int, iterable)
将函数“映射”int
到可迭代的每个元素。sum(iterable)
简单地将可迭代的元素相加。你可以regex
在这里使用:
In [19]: a = ['1 MB', '2 MB']
In [20]: sum(int(re.search(r'\d+',x).group()) for x in a)
Out[20]: 3
wherere.search(r'\d+')
返回类似:
In [23]: [re.search(r'\d+',x).group() for x in a]
Out[23]: ['1', '2']
这适用于不同的乘数:
import re
pattern = "(\d+)\s*(\w+)?"
a = ['1 MB', '2 MB', '3 K', '250' ]
multiplier = { None: 1, 'MB' : 1000000, 'K' : 1000 }
def multi(m):
if m:
return int(m.group(1)) * multiplier[m.group(2)]
else:
return 0
r = map(multi, [ re.search(pattern, x) for x in a])
print r
print sum(r)
使用以下输出:
[1000000, 2000000, 3000, 250]
3003250