如何将python中的这个列表转换为给定的表单

时间:2015-10-18 03:28:58

标签: python-2.7

我有一个这种格式的列表: -

j1=['t1', ['xl(a)', 'w(a)', 'xl(c)', 'w(c)', 'xl(b)', 'w(b)', 'ul(a)', 'ul(b)', 'ul(c)'], 't2', ['xl(b)', 'r(b)', 'w(b)', 'xl(a)', 'r(a)', 'w(a)', 'ul(b)', 'ul(a)'], 't3', ['xl(b)', 'w(b)', 'r(b)', 'ul(b)']]

我希望将其更改为

j1=[['t1', ['xl(a)', 'w(a)', 'xl(c)', 'w(c)']], ['t2', ['xl(b)', 'r(b)', 'w(b)', 'xl(a)']], ['t3', ['xl(b)', 'w(b)', 'r(b)', 'ul(b)']],['t1',['xl(b)', 'w(b)', 'ul(a)', 'ul(b)'],['t2',['r(a)', 'w(a)', 'ul(b)', 'ul(a)']],['t1',['ul(c)']]]

在t1,t2或t3的列表项目中最多有4个项目。 我如何执行转换我想实际应用循环

1 个答案:

答案 0 :(得分:1)

这是一组简单的循环和检查:

answer=[]
head=[]
tails=[]
for x,y in enumerate(j1):
  if x%2==0:
    head.append(y)
  else:
    tails.append(y)

stillmore = True;
while stillmore == True:
  for i,z in enumerate(tails):
    temp = []
    if len(z)>0:
      temp.append(z.pop(0))
    if len(z)>0:
      temp.append(z.pop(0))
    if len(z)>0:
      temp.append(z.pop(0))
    if len(z)>0:
      temp.append(z.pop(0))
    if len(temp)>0:
      doub=[]
      doub.append(head[i])
      doub.append(temp)
      answer.append(doub)
  left=0
  for z in tails:
    left=left+len(z)
  if left == 0:
    stillmore = False
print answer

必须有其他压缩方式来表达这一点,但这是相当清楚它正在做什么。