gpt4 book ai didi

python 如何在不从列表中删除元素的情况下按出现次数对列表进行排序?

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:12 25 4
gpt4 key购买 nike

只是想知道如何在 python 2.7 中按频率/出现次数对列表进行排序,如果 2 个元素出现的次数相同,那么在原始列表中首先出现的元素将位于新列表中另一个元素的前面。

例如:

list = [5,6,8,9,8,8,3,4,4,6,6]
sorted_list = [6,6,6,8,8,8,4,4,5,9,3]

知道为什么解决方案不适用于 [1,3,3,3,2,2,2,1,1]。输出是 [3,3,3,2,2,2,1 ,1,1] 但正确的输出是 [1,1,1,3,3,3,2,2,2]再次感谢

最佳答案

您可以使用 collections 中的 Counter 类作为排序键。由于您可能有多个出现次数相同的元素,您可以使用值本身作为辅助排序键,以便将相同的元素组合在一起:

>>> from collections import Counter
>>> lst = [5,6,8,9,8,8,3,4,4,6,6]
>>> c = Counter(lst)
>>> sorted(lst, key = lambda x : (c[x], x), reverse = True)
[8, 8, 8, 6, 6, 6, 4, 4, 9, 5, 3]

编辑:正如 MSeifert 评论的那样,关系应该按首次出现的顺序而不是元素的值来打破。这可以在原始列表上使用 index 函数来完成:

>>> sorted(lst, key = lambda x : (-1 * c[x], lst.index(x)))
[6, 6, 6, 8, 8, 8, 4, 4, 5, 9, 3]

关于python 如何在不从列表中删除元素的情况下按出现次数对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42394627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com