我有一个列表,其中包含不同项目的字符串计数。有时在括号中给出补货。该列表如下所示:
23
21 (+3)
32 (+14)
所以数字和括号之间总是有空格。首先,我写了一个我在系列中应用的功能。我已经两次使用拆分方法只返回第一个数字:
splitted = item.split(" ")
splitted2 = splitted[0].split("+")
return int(splitted2[0])
这个解决方案已经有点hacky了,最重要的是,我错过了括号中的补货。现在我想知道,我怎么可能将两个数字加在一起。因此,我会将列表拆分一次,以便我得到这个结果:
['23']
['21', '(+3)']
然后我想只选择必须包含值的列表项,删除+
和()
并将第一个和第二个值一起添加。我该怎么办?
答案 0 :(得分:3)
借助此问题Extract numbers from a string
str = "32 (+14)"
import re
data = re.findall(r'\d+', str)
# ['32', '14']
sum = 0
for d in data:
sum+=int(d)
print(sum)
输出:
46
查看如何解析数字using regex。在此,d
代表[0-9]
另一种方法:(在this answer的帮助下)
>>> import re
>>> str = "32 (+14)"
>>> eval(re.sub('[\(\)]', '', str.replace(' ', '')))
46
这也将允许用户进行任何操作
答案 1 :(得分:3)
这是一种方法,它可以逐字地评估'+'操作。
import ast, re
lst = ['23', '21 (+3)', '32 (+14)']
lst = [ast.literal_eval(re.sub('[\(\)]', '', i.replace(' ', ''))) for i in lst]
# [23, 24, 46]
答案 2 :(得分:1)
不是最好的方法,但这有效。正则表达式将是更好的选择。
>>> str = "32 (+14)"
>>> str.replace("(+", "").replace(")", "").split(" ")
['32', '14']
正则表达式:
>>> import re
>>> str = "32 (+14)"
>>> nums = re.findall('\d+', str )
>>> print(sum(int(i) for i in nums))
46