鱼C论坛

 找回密码
 立即注册
查看: 1302|回复: 7

[已解决]列表中字符串处理问题

[复制链接]
发表于 2020-9-25 16:55:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神好

有下面这样一个字符串,小弟需要将其中的'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)

希望大神们不宁赐教
最佳答案
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(' ')[0])
        a = jisuan.split('+')[0]
        b = jisuan.split('+')[1]
        c = jisuan.split('+')[2]
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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))))

--------------------------
[3, 6, 6]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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(' ')[0])
        a = jisuan.split('+')[0]
        b = jisuan.split('+')[1]
        c = jisuan.split('+')[2]
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)[0]
        print("%s的计算结果是:"%each,eval(each))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 17:59:59 From FishC Mobile | 显示全部楼层
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)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-27 16:04:10 | 显示全部楼层

老哥,你这个相对好理解些,方便加个注释啥的不? 我刚起步,5行开始有点疑惑。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-27 16:10:17 | 显示全部楼层

哦哦 我明白了
第四行的split 是为了去除引号后,取第0个字符串(其实只有一个字符串),后面三行分别是去除+后取第0,1,2个字符串,然后相加,不知道我的理解对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

其实4楼给的内置函数eval()更方便,可以把'2+2+2'直接运算了,也不需要再分割了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 13:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表