我有以下列表:
list = ['t' , 'r', 'q', ']', '[' , 'd', 'e', 'n', ']' , '[', 'l', 't']
如何转换创建单个列表,例如:
list1 = ['t', 'r', 'q']
list2 = ['d' , 'e', 'n']
list3 = ['l', 't']
答案 0 :(得分:3)
您可以使用itertools groupby:
import itertools
l = ['t' , 'r', 'q', ']', '[' , 'd', 'e', 'n', ']' , '[', 'l', 't']
new_l = [list(group) for i, group in itertools.groupby(l,
lambda x: x in [']', '[']) if not i]
# [['t', 'r', 'q'], ['d', 'e', 'n'], ['l', 't']]
你也可以在没有lambda的情况下(信用转到Jon Clements):
new_l = [list(group) for i, group in itertools.groupby(l,
set('[]').intersection) if not i]
答案 1 :(得分:0)
因为你似乎没有领先&尾随括号,我会将它们连接成一个字符串然后拆分它们:
joinedList = "".join(list)
splitList = joinedList.split('][')
从你的代码中(并在评论中指出),list
看起来有点奇怪,可能以前是一个完整的字符串。您可能希望处理为您提供list
的变量。
答案 2 :(得分:0)
另一种方法:
temp=[]
final=[]
for item in list:
if item != ']':
temp.append(item)
else:
final.append(temp)
temp=[]
我想这里唯一的优点是项目不必是字符串。
但正如评论中指出的那样,你应该首先避免使用这种列表...
答案 3 :(得分:0)
同意其他海报,看起来你最终看起来很奇怪。
如果您输入的确实确定格式正如您所说的那样,并且您确定不会输入格式错误,那么您可以按照以下方式执行操作:
input = ['t' , 'r', 'q', ']', '[' , 'd', 'e', 'n', ']' , '[', 'l', 't']
scratch = list(input)
output = []
def find_bracket(L):
try:
return L.index(']')
except:
return -1
bracket_index = find_bracket(scratch)
while bracket_index > 0:
output.append( scratch[:bracket_index] )
scratch = scratch[bracket_index+2:]
bracket_index = find_bracket(scratch)
output.append( scratch )
print output
给我:
[['t', 'r', 'q'], ['d', 'e', 'n'], ['l', 't']]
答案 4 :(得分:0)
试试这个 -
>>> li = ['t' , 'r', 'q', ']', '[' , 'd', 'e', 'n', ']' , '[', 'l', 't']
>>> list1, list2, list3 = [[c for c in a] for a in "".join(li).split("][")]
#OUTPUT
>>> list1
['t', 'r', 'q']
>>> list2
['d', 'e', 'n']
>>> list3
['l', 't']