2024-10-04 05:27:01 发布
网友
我想知道如何对列表中的相似值进行排序,然后将相似值拆分为子列表。在
例如:我想要一个函数,它可以
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,它很好地对列表中的内容进行排序,但不会将列表分解为子列表。什么模块能帮到我?在
正如其他人所建议的itertools.groupby(这是我的首选)collections.Counter也可以使用collections.Counter获得密钥和频率,按键排序,然后展开回freq time。在
itertools.groupby
collections.Counter
from itertools import repeat from collections import Counter grouped = [list(repeat(key, freq)) for key, freq in sorted(Counter(L).iteritems())]
检查itertools模块,它具有有用的groupby函数:
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)
结果:
有几件事需要注意:groupby需要将它处理的数据按您希望分组的同一个键排序,否则它将无法工作。另外,迭代器需要在继续下一个组之前被使用,因此请确保将list(iterator)存储到另一个列表或其他东西中。一条线会给你想要的结果:
list(iterator)
>>> [list(it) for key, it in groupby(sorted(L))] [[2, 2], [3], [4, 4], [10]]
正如其他人所建议的
itertools.groupby
(这是我的首选)collections.Counter
也可以使用collections.Counter
获得密钥和频率,按键排序,然后展开回freq time。在检查
itertools
模块,它具有有用的groupby
函数:您应该能够修改它以获取列表中的值。在
使用itertools模块中的^{} 。在
结果:
^{pr2}$有几件事需要注意:
groupby
需要将它处理的数据按您希望分组的同一个键排序,否则它将无法工作。另外,迭代器需要在继续下一个组之前被使用,因此请确保将list(iterator)
存储到另一个列表或其他东西中。一条线会给你想要的结果:相关问题 更多 >
编程相关推荐