问题描述
我发现在以下情况下编写python代码很困难
我有一个清单叫做
sume=['12 1929 8827','8837 139']
我将字符串转换为int,但由于之间存在“”,因此显示错误。
如何通过消除两者之间的“”来计算数字总和。
答案应该是19744。
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
2楼
使用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
。
3楼
使用sum
+ map
和str.split()
>>> sume=['12 1929 8827','8837 139']
>>> elems = [sum(map(int, s.split())) for s in sume]
[10768, 8976]
如果需要所有元素的总和,可以再次使用sum
>>> sum(elems)
19744
4楼
就像是:
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)
5楼
简单的解决方案是sum(map(int, ' '.join(sume).split()))