当前位置: 代码迷 >> python >> 使用python查找字符串中存在的数字总和,中间用空格隔开
  详细解决方案

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

热度:103   发布时间:2023-06-19 09:19:19.0

我发现在以下情况下编写python代码很困难

我有一个清单叫做

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

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

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

答案应该是19744。

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

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

使用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()返回一个字符串列表,因此,在求和之前,仍然需要将每个项目都强制转换为int

使用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

就像是:

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)

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