【发布时间】:2023-03-30 01:03:01
【问题描述】:
你会如何分割一个字符串
'1,55,6,89,2|7,29,44,5,8|767,822,999'
在两个分隔符 ',' 和 '|' 上,这样您就有一个包含以下值的列表:
[[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]]
【问题讨论】:
你会如何分割一个字符串
'1,55,6,89,2|7,29,44,5,8|767,822,999'
在两个分隔符 ',' 和 '|' 上,这样您就有一个包含以下值的列表:
[[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]]
【问题讨论】:
列表推导式是完成此任务的最简洁方式。
>>> s = '1,55,6,89,2|7,29,44,5,8|767,822,999'
>>> [[int(x) for x in ss.split(',')] for ss in s.split('|')]
[[1, 55, 6, 89, 2], [7, 29, 44, 5, 8], [767, 822, 999]]
【讨论】:
my_data = [x.split(',') for x in input_string.split('|')]
【讨论】:
import re
regx = re.compile('(\A)|(\|)|(\Z)')
def repl(mat, di = {1:'[[', 2:'],[', 3:']]'} ):
return di[mat.lastindex]
ss = '1,55,6,89,2|7,29,44,5,8|767,822,999'
my_data = eval( regx.sub(repl,ss) )
print my_data[1]
print my_data[1][2]
结果
[7, 29, 44, 5, 8]
44
我知道:有些人会尖叫不使用 eval()
编辑
ss = '1,55,6,89,2|7,29,44,5,8|767,822,999'
my_data = eval( ss.replace('|','],[').join(('[[',']]')))
【讨论】:
eval,尤其是因为它完全没有必要。
exec( regx.sub(repl,ss) ) 和 di = {1:'my_data = [[', 2:'],[', 3:']]'}!噗噗噗
my_data = [map(int, line.split(',')) for line in input_string.split('|')]
【讨论】:
map 是否真的与内部列表理解有足够的差异,值得额外的答案。