2015-02-12 138 views
0

如果第一個元素使用下面的代碼具有相同的第二個元素,我已經設法將第一個元素分組到列表中。有沒有更好的方式來做到這一點。在列表Python中對相同的元素進行分組

注意:總是有兩個相同的第二個元素。

lst = [ 
    [1, '200309060143'], 
    [2, '200309060143'], 
    [3, '200309060143'], 
    [4, '200309060143'], 
    [5, '200309060143'], 
    [6, '200309060143'], 
    [7, '200309060143'], 
    [8, '200309060143'], 

    [1, '200309060144'], 
    [2, '200309060144'], 
    [3, '200309060144'], 

    [1, '200309060145'], 
    [2, '200309060145'], 

    [1, '200401100047'], 
    [2, '200401100047'], 
    [3, '200401100047'] 
    ] 

    mega_lst = [] 
    temp_lst = [] 

for i in range(len(lst)): 

    if i == (len(lst)-1): 

     break;  

    else: 
     if lst[i][1] == lst[i + 1][1]: 

      temp_lst.append(lst[i][0])   

      if i == (len(lst)-2): 

       temp_lst.append(lst[len(lst)-1][0]) 

       mega_lst.append(temp_lst)    
     else: 
      temp_lst.append(lst[i][0]) 

      mega_lst.append(temp_lst) 

      temp_lst = [] 

print mega_lst 

我的代碼結果:[[1,2,3,4,5,6,7,8],[1,2,3],[1,2],[1,2,3 ]]

預期結果:[[1,2,3,4,5,6,7,8],[1,2,3],[1,2],[1,2,3]]

回答

2
>>> list(list(x[1]) for x in itertools.groupby(lst, operator.itemgetter(1))) 
[[[1, '200309060143'], [2, '200309060143'], [3, '200309060143'], [4, '200309060143'], [5, '200309060143'], [6, '200309060143'], [7, '200309060143'], [8, '200309060143']], [[1, '200309060144'], [2, '200309060144'], [3, '200309060144']], [[1, '200309060145'], [2, '200309060145']], [[1, '200401100047'], [2, '200401100047'], [3, '200401100047']]] 

編輯:

而如果下一步就是給你的麻煩:

>>> list([y[0] for y in x[1]] for x in itertools.groupby(lst, operator.itemgetter(1))) 
[[1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3], [1, 2], [1, 2, 3]] 
+1

一個公正的筆記 - 這隻有在列表按您想要分組的項目排序時纔有效。 '[(1,'a'),(3,'b'),(2,'a')]'不會給出[[1,2],[3]]'而是[[1], [2],[3]]'! – 2015-02-12 04:25:29

相關問題