鱼C论坛

 找回密码
 立即注册
查看: 1585|回复: 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
  1. listA = ('1+1+1', None, '2+2+2 (4A4B)', None, None, '2+2+2 (64AB)')
  2. for i in listA:
  3.     if i != None:
  4.         jisuan = (i.split(' ')[0])
  5.         a = jisuan.split('+')[0]
  6.         b = jisuan.split('+')[1]
  7.         c = jisuan.split('+')[2]
  8.         result = int(a) + int(b) + int(c)
  9.         print(f'{a}+{b}+{c}={result}')
复制代码


1+1+1=3
2+2+2=6
2+2+2=6
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-25 17:05:53 | 显示全部楼层
  1. import re
  2. listA = ('1+1+1',  None,  '2+2+2 (4A4B)',  None,  None,  '2+2+2 (64AB)')
  3. print(list(map(lambda y:eval(re.sub('\(.*\)','',y)),filter(lambda x:x!=None,listA))))

  4. --------------------------
  5. [3, 6, 6]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 17:11:16 | 显示全部楼层    本楼为最佳答案   
  1. listA = ('1+1+1', None, '2+2+2 (4A4B)', None, None, '2+2+2 (64AB)')
  2. for i in listA:
  3.     if i != None:
  4.         jisuan = (i.split(' ')[0])
  5.         a = jisuan.split('+')[0]
  6.         b = jisuan.split('+')[1]
  7.         c = jisuan.split('+')[2]
  8.         result = int(a) + int(b) + int(c)
  9.         print(f'{a}+{b}+{c}={result}')
复制代码


1+1+1=3
2+2+2=6
2+2+2=6
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 17:12:20 | 显示全部楼层
  1. import re
  2. listA = ['1+1+1',  None,  '2+2+2 (4A4B)',  None,  None,  '2+2+2 (64AB)']
  3. for each in listA:
  4.     if each:
  5.         if '('in each:
  6.             each=re.findall(r'(.*?)\(',each)[0]
  7.         print("%s的计算结果是:"%each,eval(each))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 17:59:59 From FishC Mobile | 显示全部楼层
  1. import re

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

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

  4. for ep in zj:
  5.     print('%s=%s' %(ep, eval(ep)))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

老哥,你这个相对好理解些,方便加个注释啥的不? 我刚起步,5行开始有点疑惑。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦哦 我明白了
第四行的split 是为了去除引号后,取第0个字符串(其实只有一个字符串),后面三行分别是去除+后取第0,1,2个字符串,然后相加,不知道我的理解对不对
小甲鱼最新课程 -> https://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'直接运算了,也不需要再分割了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 17:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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