2013-02-13 91 views
1

你好,我是新来的Python 我有名单列表,拆分列表的Python列表

data = [['shop_id', '=', 1], 
     ['product_id', '=', 16], ['product_id', '=', 8], ['product_id', '=', 4], ['product_id', '=', 6], 
     ['so', '=', 1],['so', '=', 2], 
     ['state', '=', u'draft'] 
     ] 

,我想一个输出一样,

out_put = [[['shop_id', '=', 1]], 
      [['shop_id', '=', 1],['product_id', '=', 16]], 
      [['shop_id', '=', 1],['product_id', '=', 8]], 
      [['shop_id', '=', 1],['product_id', '=', 4]], 
      [['shop_id', '=', 1],['product_id', '=', 6]], 
      [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 1]], 
      [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 1]], 
      [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 1]], 
      [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 1]], 
      [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 2]], 
      [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 2]], 
      [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 2]], 
      [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 2]], 
      [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 1],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 1],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 1],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 1],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 2],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 2],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 2],['state', '=', u'draft']], 
      [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 2],['state', '=', u'draft']], 
      ] 

我尝试了好几种方法但找不到solution.like

for domain in data: 
    if domain[0] not in temp: 
     final_dom.append(domain) 
     print "final_dom :::",final_dom 
     temp.append(domain[0]) 
    else: 
     print "adsada" 
     final_dom.pop() 
     final_dom.append(domain) 
     print "final_dom :::",final_dom 
+2

您确定列表是正确的路吗?似乎你应该使用字典。 – StoryTeller 2013-02-13 12:16:31

+0

这是一个你想要输出的丑陋数据结构,但是你可能会发现'itertools'模块很有用。你为什么要这个输出?你究竟在努力完成什么? – geoffspear 2013-02-13 12:16:57

+0

所以。许多。括号。 – Aesthete 2013-02-13 12:17:06

回答

2
from itertools import groupby, product 
from operator import itemgetter 

groups = [list(g) for _,g in groupby(data,key=itemgetter(0))] 
for i in range(1,len(groups)+1): 
    print list(product(*groups[:i])) 

出:

[(['shop_id', '=', 1],)] 
[(['shop_id', '=', 1], ['product_id', '=', 16]), 
(['shop_id', '=', 1], ['product_id', '=', 8]), 
(['shop_id', '=', 1], ['product_id', '=', 4]), 
(['shop_id', '=', 1], ['product_id', '=', 6])] 
[(['shop_id', '=', 1], ['product_id', '=', 16], ['so', '=', 1]), 
(['shop_id', '=', 1], ['product_id', '=', 16], ['so', '=', 2]), 
(['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 1]), 
(['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 2]), 
(['shop_id', '=', 1], ['product_id', '=', 4], ['so', '=', 1]), 
(['shop_id', '=', 1], ['product_id', '=', 4], ['so', '=', 2]), 
(['shop_id', '=', 1], ['product_id', '=', 6], ['so', '=', 1]), 
(['shop_id', '=', 1], ['product_id', '=', 6], ['so', '=', 2])] 
[(['shop_id', '=', 1], ['product_id', '=', 16], ['so', '=', 1], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 16], ['so', '=', 2], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 1], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 2], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 4], ['so', '=', 1], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 4], ['so', '=', 2], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 6], ['so', '=', 1], ['state', '=', u'draft']), 
(['shop_id', '=', 1], ['product_id', '=', 6], ['so', '=', 2], ['state', '=', u'draft'])] 
+0

非常感谢!它的工作! – OpenCurious 2013-02-13 13:19:59