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
4

1 回答 1

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)]]
于 2012-07-06T19:02:12.500 回答