使用python查找字符串中存在的数字总和,中间用空格隔开

时间:2018-09-16 18:30:59

标签: python python-3.x

在以下情况下,我很难编写python代码

我有一个名为

的列表
sume=['12 1929 8827','8837 139']

我将字符串转换为int,但由于之间存在“”,因此显示错误。

如何通过消除中间的“”来计算数字的总和。

答案应该是19744。

5 个答案:

答案 0 :(得分:1)

您需要按空间划分并求和这些数字,以下是一种方法:

sum(number for word in ['12 1929 8827','8837 139'] for number in map(int, word.split()))

输出

19744

更可靠的方法是在强制转换失败时提供默认值:

def to_int(text, default=0):
    try:
        return int(text)
    except ValueError:
        return default

text_numbers = ['12 1929 8827','8837 139']

print(sum(number for word in text_numbers for number in map(to_int, word.split())))

输出

19744

答案 1 :(得分:1)

使用str.split()方法按空格分割:

total = sum(sum(int(n) for n in i.split())
            for i in sume)
#                    ^^ that's your starting list

此操作将列表中数字上的每个字符串作为空格,并将其按空格分割,并返回其总和。然后,将每个“和”馈入外部sum调用中以获取它们的总数。展开后的外观如下所示:

total = 0
for i in sume:
    i = i.split()
    for n in i:
        total += int(n)

请记住,split()返回了 strings 的列表,因此您仍然需要在将各项相加之前将其强制转换为int

答案 2 :(得分:1)

使用sum + mapstr.split()

>>> sume=['12 1929 8827','8837 139']
>>> elems = [sum(map(int, s.split())) for s in sume]
[10768, 8976]

如果需要所有元素之和,可以再次使用sum

>>> sum(elems)
19744

答案 3 :(得分:1)

类似的东西:

parsed = []
array = ['12 1929 8827','8837 139']
for string in array:
    for component in string.split(' '):
        parsed.append(int(component))

sum = reduce(lambda a, x: a + x, parsed)

或更简单(如@wwii所指出):

parsed = []
array = ['12 1929 8827','8837 139']
for string in array:
    for component in string.split(' '):
        parsed.append(int(component))

sum = sum(parsed)

或更简单(也由@wwii指出):

accumulated = 0
array = ['12 1929 8827','8837 139']
for string in array:
    for component in string.split(' '):
        accumulated += int(component)

sum = sum(parsed)

答案 4 :(得分:0)

简单的解决方案是sum(map(int, ' '.join(sume).split()))