【问题标题】:sorting a python list by frequency of elements按元素的频率对 python 列表进行排序
【发布时间】:2016-08-08 04:34:22
【问题描述】:

我有这段代码,它按元素的频率对 python 列表进行排序。它适用于所有其他情况,除非两个元素的频率相同。如果频率相同,那么我想先将较小的值放在较高的值之前:

counts = collections.Counter(arr)
new_list = sorted(arr, key=lambda x: counts[x])

for item in new_list:
    print item

如果是[3,1,2,2,4],输出应该是[1,3,4,2,2],但我得到[3,1,4,2,2]。如何解决此错误?

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

    您可以将您的键 lambda 函数设置为一个元组,因此,它将首先按 counts[x] 排序,如果有平局,它将按值本身 x 排序。

     new_list = sorted(arr, key=lambda x: (counts[x], x))
    

    【讨论】:

    • 如果应该是小数,我觉得应该是new_list = sorted(arr, key=lambda x: (counts[x], x))?
    • @Karin 是的,对不起。我修好了。
    【解决方案2】:

    您仅按项目数量排序。在这个逻辑下,所有出现一次的项目都具有相同的“权重”,因此python保留了它们原来的相关位置。例如,31 都出现一次,所以就它们的排序而言,它们是等价的。由于3 在原始列表中位于1 之前,因此它也位于结果的首位。

    您所需的输出需要辅助排序标准 - 元素的值。为此,您必须明确指定:

    new_list = sorted(arr, key=lambda x: (counts[x], x))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 2015-10-18
      • 1970-01-01
      • 2020-10-19
      • 2021-04-16
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多