如何在Python中对值进行排序

2024-10-04 05:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何对列表中的相似值进行排序,然后将相似值拆分为子列表。在

例如:我想要一个函数,它可以

def sort_by_like_values(list):
    #python magic

>>>list=[2,2,3,4,4,10]
>>>[[2,2],[3],[4,4],[10]]
OR
>>>[2,2],[3],[4,4],[10]

我阅读了sortedapi,它很好地对列表中的内容进行排序,但不会将列表分解为子列表。什么模块能帮到我?在


Tags: 模块or函数内容列表by排序def
3条回答

正如其他人所建议的itertools.groupby(这是我的首选)collections.Counter也可以使用collections.Counter获得密钥和频率,按键排序,然后展开回freq time。在

from itertools import repeat
from collections import Counter

grouped = [list(repeat(key, freq)) for key, freq in sorted(Counter(L).iteritems())]

检查itertools模块,它具有有用的groupby函数:

import itertools as i
for k,g in i.groupby(sorted([2,2,3,4,4,10])):
    print list(g)

....

[2, 2]
[3]
[4, 4]
[10]

您应该能够修改它以获取列表中的值。在

使用itertools模块中的^{}。在

from itertools import groupby

L = [2, 2, 3, 4, 4, 10]

L.sort()
for key, iterator in groupby(L):
    print key, list(iterator)

结果:

^{pr2}$

有几件事需要注意:groupby需要将它处理的数据按您希望分组的同一个键排序,否则它将无法工作。另外,迭代器需要在继续下一个组之前被使用,因此请确保将list(iterator)存储到另一个列表或其他东西中。一条线会给你想要的结果:

>>> [list(it) for key, it in groupby(sorted(L))]
[[2, 2], [3], [4, 4], [10]]

相关问题 更多 >