如何从带字的字符串中添加数字?

时间:2014-02-23 19:57:33

标签: python string try-catch add

我是Python新手,我确信有一种方法可以做到这一点,我不知道。我查看了我的问题,有很多类似的问题,但我找不到我的问题。

我的字符串是:

"Arkansas 40\n Washington 83\n North Dakota 49\n New Jersey 24"

我想要做的只是将字符串中的数字加在一起。

我已经编写了一个使用“try”语句执行此操作的函数,但是“try”需要将某些内容写入缩进的“except”部分,我只是希望它只是默默地丢弃任何异常

我正在寻找的输出是:

196

(编辑)哇 - 很明显,有很多方法可以做到这一点。我为我想要完成的非常简单的任务选择了最佳答案。

主要是,我需要知道的是“isdigit()”,当使用try语句时,异常的“pass”关键字。

5 个答案:

答案 0 :(得分:3)

这有效:

s = "Arkansas 40\n Washington 83\n North Dakota 49\n New Jersey 24"

sum(int(n) for n in s.split() if n.isdigit())

196

基本上.isdigit()方法可以解决这个问题。不需要try/except,就好像字符串中没有数字一样,n不符合isdigit()条件,sum将返回0。

答案 1 :(得分:2)

>>> s = "Arkansas 40\n Washington 83\n North Dakota 49\n New Jersey 24"
>>> sum([int(x.split()[-1]) for x in s.split('\n')])
196

答案 2 :(得分:1)

像这样的东西

import re
tot = 0
s = "Arkansas 40\n Washington 83\n North Dakota 49\n New Jersey 24"
for line in s.split('\n'):
    ma = re.search('(\d+)', line)
    if ma:
        tot += ma.group(1)
print tot

答案 3 :(得分:1)

所以你需要先做的是从字符串中提取数字。您可以使用String.split()将字符串拆分为块,然后通过迭代它们来测试每个是否为数字,只返回整数。 例如,如果您有字符串s:

[int(i) for i in s.split('\n') if i.isdigit()]

将创建一个整数数组。那么你所要做的就是总结它们,这就是你的答案。

答案 4 :(得分:0)

滥用mapfilter&的绝佳机会reduce

print reduce(lambda x,y: x+y, 
             map(lambda x: int(x), 
                 filter(lambda x: x.isdigit(), 
                        re.split(' |\n',s))))