鱼C论坛

 找回密码
 立即注册
查看: 835|回复: 14

[已解决]如何转换成列表

[复制链接]
发表于 2019-6-29 11:11:58 | 显示全部楼层 |阅读模式

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

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

x
请问,如果我输入 f(a, g(a, b, f(a,b,c)), b, c)  或者 f(a, FF(a, b, fff(a, b, c, FfFf(a,b,c,d)), FfFf(a,b,c,d)), c,d) 这样的数据,

要怎么把它转换成 每个括号一个列表呢? 例如, [a, [a, b , [a,b,c]] , b , c  ]], 我是按照( )来进行切分的,然后再把每一个括号进行组合

但是我得到的是这样的 [['(', 'a', ',', 'b', ',', 'c', ')'], ['(', 'a', ',', 'b', ',', 'f', '(', 'a', ',', 'b', ',', 'c', ')'], ['(', 'a', ',', 'g', '(', 'a', ',', 'b', ',', 'f', '(', 'a', ',', 'b', ',', 'c', ')']]
最佳答案
2019-6-29 11:40:56
lou 发表于 2019-6-29 11:39
感觉不太对。。 因为如果是这个例子的话 f(a, FF(a, b, fff(a, b, c, FfFf(a,b,c,d)), FfFf(a,b,c,d)), c ...
  1. import re

  2. s = 'f(a, FF(a, b, fff(a, b, c, FfFf(a,b,c,d)), FfFf(a,b,c,d)), c,d)'
  3. s1 = re.sub('\w*\(', '(', s) #过滤括号前的字母
  4. s2 = re.sub('\(', '[', s1)#替换左中括号
  5. s3 = re.sub('\)', ']', s2)
  6. print(s3)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-29 11:21:38 | 显示全部楼层
给一组标准的输入输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-29 11:32:04 | 显示全部楼层
新手·ing 发表于 2019-6-29 11:21
给一组标准的输入输出

input: f(a, g(a, b, f(a,b,c)), b, c)

output: [a, [a, b , [a, b, c]] , b , c  ]]

这样可以吗? 不要括号前面的字母
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 11:33:13 | 显示全部楼层
我可不可以用正则替换?

  1. import re

  2. s = 'f(a, g(a, b, f(a,b,c)), b, c)'
  3. s1 = re.sub('\w\(', '(', s) #过滤括号前的字母
  4. s2 = re.sub('\(', '[', s1)#替换左中括号
  5. s3 = re.sub('\)', ']', s2)
  6. print(s3)
  7. [a, [a, b, [a,b,c]], b, c]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-6-29 11:39:57 | 显示全部楼层
newu 发表于 2019-6-29 11:33
我可不可以用正则替换?

感觉不太对。。 因为如果是这个例子的话 f(a, FF(a, b, fff(a, b, c, FfFf(a,b,c,d)), FfFf(a,b,c,d)), c,d) , 你得出的结果是这样的[a, F[a, b, ff[a, b, c, FfF[a,b,c,d]], FfF[a,b,c,d]], c,d]

理想的应该是这样, [a, [a, b, [a, b, c, [a, b ,c, d]], [a, b, c, d ]] c, d]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 11:40:56 | 显示全部楼层    本楼为最佳答案   
lou 发表于 2019-6-29 11:39
感觉不太对。。 因为如果是这个例子的话 f(a, FF(a, b, fff(a, b, c, FfFf(a,b,c,d)), FfFf(a,b,c,d)), c ...
  1. import re

  2. s = 'f(a, FF(a, b, fff(a, b, c, FfFf(a,b,c,d)), FfFf(a,b,c,d)), c,d)'
  3. s1 = re.sub('\w*\(', '(', s) #过滤括号前的字母
  4. s2 = re.sub('\(', '[', s1)#替换左中括号
  5. s3 = re.sub('\)', ']', s2)
  6. print(s3)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 11:45:06 | 显示全部楼层

这样第四五行就可以改成一行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 11:45:50 | 显示全部楼层
新手·ing 发表于 2019-6-29 11:45
这样第四五行就可以改成一行了

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-29 11:48:03 | 显示全部楼层

谢谢,学习到新东西了, 我是按部就班的切... 还在想着怎么找每个括号前的逗号,然后把逗号到右括号之间的东西都用列表替换。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 13:15:22 | 显示全部楼层
    "最佳答案" 是文本替换,不能改变数据本身的类型,我提供一个改变数据类型的代码。
  1. def tuple2list(v):
  2.     ret = v
  3.     if isinstance(v , tuple):
  4.         ret = []
  5.         for x in v:
  6.             ret . append(tuple2list(x))
  7.     return ret

  8. a = (1 , 2 , (5 , 88 , 2000 , (3 , 605 , 808)) , 77 , 123)
  9. c = tuple2list(a)
  10. print c
复制代码


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

使用道具 举报

 楼主| 发表于 2019-6-29 13:24:07 | 显示全部楼层
jackz007 发表于 2019-6-29 13:15
"最佳答案" 是文本替换,不能改变数据本身的类型,我提供一个改变数据类型的代码。

那如果 a=  f(a, g(a, b, f(a,b,c)), b, c)  的话咋整?不是数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 13:52:38 | 显示全部楼层
    "f(a, g(a, b, f(a,b,c)), b, c) " 肯定不是元组,那么,请你先告诉我,它是什么数据类型?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-29 13:55:18 | 显示全部楼层
jackz007 发表于 2019-6-29 13:52
"f(a, g(a, b, f(a,b,c)), b, c) " 肯定不是元组,那么,请你先告诉我,它是什么数据类型?

字符串类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-29 14:01:09 | 显示全部楼层
      既然是字符串,那你求助的题目 "转换成列表" ,却原来只是字符串转换,难道楼主要自己编写编译器?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-29 14:03:57 | 显示全部楼层
jackz007 发表于 2019-6-29 14:01
既然是字符串,那你求助的题目 "转换成列表" ,却原来只是字符串转换,难道楼主要自己编写编译器?

不不不,我的意思是:
如果我输入' f(a, g(a, b, f(a,b,c)), b, c)'  
要怎么把它转换成一个列表呢? 例如, ['a', '['a',' b' ,' ['a','b','c']']' , 'b' , 'c']

是想要这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 17:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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