通过唯一身份从一个列表创建列表列表

时间:2014-08-01 18:08:02

标签: python json algorithm list sorting

我正在尝试转换以下列表:

[1,2,2,4,2,1,5,4,3]

到这个列表列表:

[[1,1],[2,2],[3],[4,4],[5]]

有谁知道快速的方法吗?我将在很长的名单上运行它。这是在python中。

1 个答案:

答案 0 :(得分:3)

她去吧:

>>> from itertools import groupby
>>> [list(g) for k, g in groupby(sorted([1,2,2,4,2,1,5,4,3]))]
[[1, 1], [2, 2, 2], [3], [4, 4], [5]]

如果通过“长列表”,您可能希望在分组之前对列表进行排序,您可以这样做:

>>> li.sort()
>>> [list(g) for k, g in groupby(li)]
[[1, 1], [2, 2, 2], [3], [4, 4], [5]]

更好的是(但在你的问题中没有说明)如果你可以将这些组留作可以根据需要计算的迭代器,你可以这样做:

>>> for k, grp in groupby(li):
...    print k, grp
... 
1 <itertools._grouper object at 0x106ded210>
2 <itertools._grouper object at 0x106ded190>
3 <itertools._grouper object at 0x106ded210>
4 <itertools._grouper object at 0x106ded190>
5 <itertools._grouper object at 0x106ded210>

然后根据您的需要计算grp中的项目(一次),如下所示:

>>> for k, grp in groupby(li):
...    print k, list(grp)
... 
1 [1, 1]
2 [2, 2, 2]
3 [3]
4 [4, 4]
5 [5]