我有这个字符串: -
my_string = "[a:b][c:d][e:f]"
我想将其转换为这样的列表: -
my_list = ['[a:b]','[c:d]','[e:f]']
请注意,列表的元素仅仅是字符串。
不过我试过这些: -
ast.literal_eval(my_string)
和map(int,mystring)
。
他们都返回错误。 Split命令也会返回:['[a:b] [c:d]']。有人可以帮帮我吗?提前谢谢。
答案 0 :(得分:2)
在每个]
之后添加分号:
my_string = "[a:b][c:d][e:f]"
my_string = my_string.replace("]", "];");
然后分开它:
my_list = my_string.split(';');
答案 1 :(得分:2)
你可以使用re.findall
,这可能好像效率不高:
my_string = "[a:b][c:d][e:f]"
import re
re.findall("(\[.*?\])",my_string)
输出:
In [93]: r = re.compile("(\[.*?\])")
In [94]: my_string = "[a:b][c:d][e:f]"
In [95]: r.findall(my_string)
Out[95]: ['[a:b]', '[c:d]', '[e:f]']
或者使用str.replace
在开始和结束之间放置一个空格然后拆分:
In [101]: my_string = "[a:b][c:d][e:f]"
In [102]: my_string.replace("][","] [").split()
Out[102]: ['[a:b]', '[c:d]', '[e:f]']
哪种效率最高:
In [103]: timeit my_string.replace("][","] [").split()
1000000 loops, best of 3: 445 ns per loop
In [104]: %%timeit
s = '[a:b][c:d][e:f]'
l = s.split(']')
for i in xrange(len(l)):
l[i] += ']'
del l[len(l)-1] #Th
.....:
1000000 loops, best of 3: 1.04 µs per loop
In [105]: timeit r.findall(my_string)
1000000 loops, best of 3: 962 ns per loop
答案 2 :(得分:1)
你有没有理由忽略[e:f]
?
无论哪种方式,它应该是简单的,如下面的解决方案:
s = '[a:b][c:d][e:f]'
l = s.split(']')
for i in xrange(len(l)):
l[i] += ']'
del l[len(l)-1] #The last one will currently only be ']'
这应该得到通缉名单。
答案 3 :(得分:0)
分裂的另一种变体:
my_string = "[a:b][c:d][e:f]"
changed = []
for i in my_string.split(']'):
changed.append(i+"]")
print changed[:len(changed)-1]
给出了:
['[a:b]', '[c:d]', '[e:f]']