鱼C论坛

 找回密码
 立即注册
查看: 853|回复: 13

[已解决]关于列表的转化

[复制链接]
发表于 2019-5-20 00:33:00 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Stubborn 于 2019-5-20 00:39 编辑
  1. [[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],[17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]
复制代码

它现在是一个字符串,怎么处理后,可以得到一个列表?,, 直接用None填充,填充完之后怎么转化?
最佳答案
2019-5-20 18:05:22
Stubborn 发表于 2019-5-20 17:20
主要我卡在 new_str 如何转换成list而不破坏原有的结构,这个让我非常困扰

  1. import re

  2. s='''[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],
  3.      [17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]'''

  4. pos=[]
  5. re.sub('(?=(\,\,))',lambda i:pos.append(i.span(1)[1]),s)
  6. pos.sort(reverse= True)

  7. for p in pos:
  8.     beg=s[0:int(p)-1]
  9.     end = s[int(p):]
  10.     s=beg+'None,'+end

  11. print(type(s))#  class str
  12. print()
  13. myre=re.findall(r'\[(\d+,.*?,\[.*?\],.*?)]',s,re.M|re.S)
  14. newlist= [  i.split('\,') for i in myre]
  15. print('newlist  type is:',type(newlist))
  16. print()
  17. print(newlist)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-20 07:41:20 | 显示全部楼层
这样行不?

>>> s
"[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],[17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],
0,0,1,0,0,'Brazil','Brazil',]]"
>>> import re
>>> t=re.sub(",+",",",s)
>>> t=re.sub("\[|\]","",t)
>>> lst=t.split(",")
>>> lst
['17003', '1345917', '4', "'23:00'", '24947', "'Bethlehem Steel FC'", '0', '0', '15052', "'Ottawa Fury'", '0', '0', "'vs'", '0', '0', '0', "'us'", "'ca'", '', '0', '0', '0', '0', '0', "'USA'", "'Canada'", '', '17175', '136497
9', '4', "'23:00'", '7334', "'Ceara'", '0', '0', '1244', "'Gremio'", '0', '0', "'vs'", '0', '1', '0', "'br'", "'br'", '', '0', '0', '1', '0', '0', "'Brazil'", "'Brazil'", '']
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 10:45:06 | 显示全部楼层
系不是系这样?
  1. import re

  2. s='''[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],
  3. 0,0,0,0,0,'USA','Canada',],[17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]'''

  4. myre=re.findall('[\w\:\. ]+',s)
  5. print(myre)
  6. #[   '17003', '1345917', '4', '23:00', '24947', 'Bethlehem Steel FC', '0', '0', '15052', 'Ottawa Fury', '0', '0', 'vs', '0', '0', '0',
  7. # 'us', 'ca', '0', '0', '0', '0', '0', 'USA', 'Canada', '17175', '1364979', '4', '23:00', '7334', 'Ceara', '0', '0', '1244',
  8. # 'Gremio', '0', '0', 'vs', '0', '1', '0', 'br', 'br', '0', '0', '1', '0', '0', 'Brazil', 'Brazil']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 15:32:08 | 显示全部楼层
看来是这个样子:


  1. import re

  2. s='''[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,
  3. 'us','ca',[],0,0,0,0,0,'USA','Canada',],[17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]'''

  4. pos=[]
  5. re.sub('(?=(\,\,))',lambda i:pos.append(i.span(1)[1]),s)
  6. pos.sort(reverse= True)
  7. for p in pos:
  8.     beg=s[0:int(p)-1]
  9.     end = s[int(p):]
  10.     s=beg+'None,'+end
  11. myre=re.findall('[\w\:\. ]+',s)
  12. print(myre)
  13. '''
  14. #'vs',  ,   0,0, 填充None,填充None ,填充None ,0,       如果两个逗号之间填充一个,那吗4个连续的逗号间将填充3个None
  15.                
  16. ['17003', '1345917', '4', '23:00', '24947', 'Bethlehem Steel FC', '0', '0', '15052', 'Ottawa Fury', '0', '0',



  17. 'vs', 'None', '0', '0', 'None', 'None', 'None', '0', 'us', 'ca', '0', '0', '0', '0', '0', 'USA', 'Canada', '17175', '1364979', '4', '23:00', '7334',


  18. 'Ceara', '0', '0', '1244', 'Gremio', '0', '0', 'vs', 'None', '0', '1', 'None', 'None', 'None', '0', 'br', 'br', '0', '0', '1', '0', '0', 'Brazil', 'Brazil']


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

使用道具 举报

 楼主| 发表于 2019-5-20 16:53:25 | 显示全部楼层
kaohsing 发表于 2019-5-20 15:32
看来是这个样子:

非常感谢你的答案,不过我需要的可能是这样的
他们原来的结构不会发生变化,只不过在两个 ,, 之间填充None
  1. [[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',None,0,0,None,None,None,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],[17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',None,0,1,None,None,None,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',None]]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 17:12:19 | 显示全部楼层
Stubborn 发表于 2019-5-20 16:53
非常感谢你的答案,不过我需要的可能是这样的
他们原来的结构不会发生变化,只不过在两个 ,, 之间填充No ...

试试吧.................

  1. import re

  2. s='''[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],
  3.      [17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]'''

  4. pos=[]
  5. re.sub('(?=(\,\,))',lambda i:pos.append(i.span(1)[1]),s)
  6. pos.sort(reverse= True)
  7. for p in pos:
  8.     beg=s[0:int(p)-1]
  9.     end = s[int(p):]
  10.     s=beg+'None,'+end
  11. print(s)
  12. '''
  13. mew_str
  14. [[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',None,0,0,None,None,None,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],
  15. [17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',None,0,1,None,None,None,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',None]]

  16. old_str
  17. [[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],
  18. [17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]


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

使用道具 举报

 楼主| 发表于 2019-5-20 17:20:24 | 显示全部楼层
kaohsing 发表于 2019-5-20 17:12
试试吧.................

主要我卡在 new_str 如何转换成list而不破坏原有的结构,这个让我非常困扰
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 18:05:22 | 显示全部楼层    本楼为最佳答案   
Stubborn 发表于 2019-5-20 17:20
主要我卡在 new_str 如何转换成list而不破坏原有的结构,这个让我非常困扰

  1. import re

  2. s='''[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],
  3.      [17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]'''

  4. pos=[]
  5. re.sub('(?=(\,\,))',lambda i:pos.append(i.span(1)[1]),s)
  6. pos.sort(reverse= True)

  7. for p in pos:
  8.     beg=s[0:int(p)-1]
  9.     end = s[int(p):]
  10.     s=beg+'None,'+end

  11. print(type(s))#  class str
  12. print()
  13. myre=re.findall(r'\[(\d+,.*?,\[.*?\],.*?)]',s,re.M|re.S)
  14. newlist= [  i.split('\,') for i in myre]
  15. print('newlist  type is:',type(newlist))
  16. print()
  17. print(newlist)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 18:05:59 | 显示全部楼层
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 19:11:24 | 显示全部楼层

非常感谢,不过我在其他哪里问到了更加好的办法,处理之后,格式是正确的list字符串,可以通过eval直接转换,不会破坏原有结构
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 19:16:35 | 显示全部楼层

内置函数有资料可以参考吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 19:48:11 From FishC Mobile | 显示全部楼层
Stubborn 发表于 2019-5-20 19:11
非常感谢,不过我在其他哪里问到了更加好的办法,处理之后,格式是正确的list字符串,可以通过eval直接转 ...

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

使用道具 举报

发表于 2019-5-21 09:05:08 | 显示全部楼层
Stubborn 发表于 2019-5-20 19:11
非常感谢,不过我在其他哪里问到了更加好的办法,处理之后,格式是正确的list字符串,可以通过eval直接转 ...
  1. 试试这个:
  2. import re

  3. s = '''[[17003,1345917,4,'23:00',24947,'Bethlehem Steel FC',0,0,15052,'Ottawa Fury',0,0,'vs',,0,0,,,,0,'us','ca',[],0,0,0,0,0,'USA','Canada',],
  4.          [17175,1364979,4,'23:00',7334,'Ceara',0,0,1244,'Gremio',0,0,'vs',,0,1,,,,0,'br','br',[],0,0,1,0,0,'Brazil','Brazil',]]'''


  5. def get(i):
  6.     global  s
  7.     s=re.sub(i.group(1), ',None,', s)

  8. re.sub(r'(?=(,,))', get, s)

  9. print(eval(s))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 18:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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