我正在尝试转换以下列表:
[1,2,2,4,2,1,5,4,3]
到这个列表列表:
[[1,1],[2,2],[3],[4,4],[5]]
有谁知道快速的方法吗?我将在很长的名单上运行它。这是在python中。
答案 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]