weiyideid823 发表于 2020-9-25 16:55:34

列表中字符串处理问题

各位大神好

有下面这样一个字符串,小弟需要将其中的'1+1+1' ,’2+2+2‘这种取出来然后分别求和再相加,请问大神们怎么处理好呢

listA = ('1+1+1',None,'2+2+2 (4A4B)',None,None,'2+2+2 (64AB)')


这个列表中的字符串有这样的属性: 如果不是None的话,一定是 X+Y+Z 的这种形式(可能后面会跟有AB 这种),我现在要做的就是把不为None 的字符串提取出来,再计算各自的结果(如 1+1+1= 3)

希望大神们不宁赐教

fall_bernana 发表于 2020-9-25 17:05:53

import re
listA = ('1+1+1',None,'2+2+2 (4A4B)',None,None,'2+2+2 (64AB)')
print(list(map(lambda y:eval(re.sub('\(.*\)','',y)),filter(lambda x:x!=None,listA))))

--------------------------

疾风怪盗 发表于 2020-9-25 17:11:16

listA = ('1+1+1', None, '2+2+2 (4A4B)', None, None, '2+2+2 (64AB)')
for i in listA:
    if i != None:
      jisuan = (i.split(' '))
      a = jisuan.split('+')
      b = jisuan.split('+')
      c = jisuan.split('+')
      result = int(a) + int(b) + int(c)
      print(f'{a}+{b}+{c}={result}')


1+1+1=3
2+2+2=6
2+2+2=6

sunrise085 发表于 2020-9-25 17:12:20

import re
listA = ['1+1+1',None,'2+2+2 (4A4B)',None,None,'2+2+2 (64AB)']
for each in listA:
    if each:
      if '('in each:
            each=re.findall(r'(.*?)\(',each)
      print("%s的计算结果是:"%each,eval(each))

hrp 发表于 2020-9-25 17:59:59

import re

listA = ('1+1+1', None, '2+2+2 (4A4B)', None, None, '2+2+2 (64AB)')

zj = (re.sub(r'\s*\(.*\)', '', s) for s in listA if s)

for ep in zj:
    print('%s=%s' %(ep, eval(ep)))

weiyideid823 发表于 2020-9-27 16:04:10

疾风怪盗 发表于 2020-9-25 17:11
1+1+1=3
2+2+2=6
2+2+2=6

老哥,你这个相对好理解些,方便加个注释啥的不? 我刚起步,5行开始有点疑惑。。

weiyideid823 发表于 2020-9-27 16:10:17

疾风怪盗 发表于 2020-9-25 17:11
1+1+1=3
2+2+2=6
2+2+2=6

哦哦 我明白了
第四行的split 是为了去除引号后,取第0个字符串(其实只有一个字符串),后面三行分别是去除+后取第0,1,2个字符串,然后相加,不知道我的理解对不对

疾风怪盗 发表于 2020-9-27 16:16:04

weiyideid823 发表于 2020-9-27 16:10
哦哦 我明白了
第四行的split 是为了去除引号后,取第0个字符串(其实只有一个字符串),后面三行分别是 ...

第四行是因为元素'2+2+2 (4A4B)'里面有空格,要的是空格前面的,所以以空格为分割,取出计算公式
然后再以加号为分割分别取数字出来

其实4楼给的内置函数eval()更方便,可以把'2+2+2'直接运算了,也不需要再分割了
页: [1]
查看完整版本: 列表中字符串处理问题