将此列表转换为不带逗号的字符串列表

时间:2015-05-17 13:22:27

标签: python

我有这个字符串: -

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]']。有人可以帮帮我吗?提前谢谢。

4 个答案:

答案 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]']