2012-07-06 85 views
0

我需要一個函數,它接受兩個元素元組的列表,並返回這些元組中的第二個元素相等的元組,並保留原始序列順序。例如,如何將具有相似元素的元組序列按順序排列?

>>> seq = [(0, 1), (1, 2), (2, 2), (3, 2), (4, 1), (5, 3), (6, 3), (7, 2)] 
>>> split_repeated(seq) 
[[(0, 1)], [(1, 2), (2, 2), (3, 2)], [(4, 1)], [(5, 3), (6, 3)], [(7, 2)]] 

如果我平的結果,我必須得到原始序列:

>>> itertools.chain.from_iterable(split_repeated(seq)) == seq 
True 

回答

2
>>> seq = [(0, 1), (1, 2), (2, 2), (3, 2), (4, 1), (5, 3), (6, 3), (7, 2)] 
>>> from itertools import groupby 
>>> from operator import itemgetter 
>>> [list(items) for key,items in groupby(seq,key=itemgetter(1))] 
[[(0, 1)], [(1, 2), (2, 2), (3, 2)], [(4, 1)], [(5, 3), (6, 3)], [(7, 2)]] 
相關問題