在以下情况下,我很难编写python代码
我有一个名为
的列表sume=['12 1929 8827','8837 139']
我将字符串转换为int,但由于之间存在“”,因此显示错误。
如何通过消除中间的“”来计算数字的总和。
答案应该是19744。
答案 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
+ 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
答案 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()))