我有一个这样的清单:
a = ['1 MB', '2 MB']
我想总结一下的所有元素。
我想我首先要创建整数列表并使用sum()函数。我怎么能这样做?
答案 0 :(得分:2)
使用内置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
答案 1 :(得分:1)
假设所有元素都以' MB'
结尾,您可以这样做:
sum(map(int, (x[:-3] for x in a)))
故障:
(x[:-3] for x in a)
除字符串的最后三个字符外,其他所有字符。map(int, iterable)
'将int
函数'映射到可迭代的每个元素。sum(iterable)
简单地总结了iterable的元素。答案 2 :(得分:0)
您可以在此处使用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
其中re.search(r'\d+')
返回类似于:
In [23]: [re.search(r'\d+',x).group() for x in a]
Out[23]: ['1', '2']
答案 3 :(得分:0)
这适用于不同的乘数:
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