我有一个看起来像这样的列表:
['9,7,4', '10,5,6,5,5', '10,8,5,3,0', '8,4,2']
如何将数字转换为整数并将各个字符串值相加?
所以期望的输出是
['20','31','26','14']
答案 0 :(得分:4)
使用map
将拆分后的(使用,
作为定界符)字符串值转换为int
,然后进行列表推导以获取总和。
input_list = ['9,7,4', '10,5,6,5,5', '10,8,5,3,0', '8,4,2']
output = [str(sum(map(int, x.split(',')))) for x in input_list]
print (output)
输出
['20', '31', '26', '14']
看到您想要的输出为字符串后,我进行了编辑
答案 1 :(得分:2)
[sum(map(int, group.split(','))) for group in l]
答案 2 :(得分:1)
有人提到eval
,因此,我认为您应该采用安全评估的替代方法,使这一步更进一步:
>>> import ast
>>> [ast.literal_eval(v.replace(',', '+')) for v in lst]
>>> [20, 31, 26, 14]
我喜欢这个答案的一件事是,它纯粹是一种非功能性的方法(列表理解中没有map
,这很好,但我真的不相信混合范式)。
很明显,只有在数字之间用单个逗号分隔且没有任何前导或尾随字符以及无效的算术表达式的情况下,此方法才有效。
我将转换保留为字符串作为练习。
答案 3 :(得分:0)
如果所有字符串都采用这种格式,则可以尝试使用eval
函数-这会将数字转换为元组,您可以从中计算总和。
>>> l = ['9,7,4', '10,5,6,5,5', '10,8,5,3,0', '8,4,2']
>>> sums = [sum(numbers) for numbers in map(eval, l)]
>>> sums
[20, 31, 26, 14]
如果您希望输出列表包含字符串,则可以轻松映射以下值:
[str(value) for value in sums]
# or
map(str, sums)