在列中添加两个数字的最佳方法,用括号分隔

时间:2018-02-11 17:42:53

标签: python pandas

我有一个列表,其中包含不同项目的字符串计数。有时在括号中给出补货。该列表如下所示:

23
21 (+3)
32 (+14)

所以数字和括号之间总是有空格。首先,我写了一个我在系列中应用的功能。我已经两次使用拆分方法只返回第一个数字:

splitted = item.split(" ")
splitted2 = splitted[0].split("+")
return int(splitted2[0])

这个解决方案已经有点hacky了,最重要的是,我错过了括号中的补货。现在我想知道,我怎么可能将两个数字加在一起。因此,我会将列表拆分一次,以便我得到这个结果:

['23']
['21', '(+3)']

然后我想只选择必须包含值的列表项,删除+()并将第一个和第二个值一起添加。我该怎么办?

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