【问题标题】:Sorting a python list by frequency of their absolute difference按绝对差的频率对 python 列表进行排序
【发布时间】:2021-04-16 02:23:53
【问题描述】:

我有一个类似的列表,

lst=[[3,7],[4,9],[8,3],[1,5],[9,4],[4,5],[3,0],[2,7],[1,9]] 

然后想按绝对差异的频率对这个列表进行排序,如下所示:

|3-7|=4,  |4-9|=5,    |8-3|=5,    |1-5|=4,    |9-4|=5,    |4-5|=1,    |3-0|=3,    |2-7|=5,    |1-9|=8, 

输出应该是:

[[4,9],[8,3],[9,4],[2,7],[3,7],[1,5],[4,5],[3,0],[1,9]]

我在做:

list.sort(key=self.SortByDifference,reverse=True)

def SortByDifference(self, element):
    return abs(element[0]-element[1])

但是,这首先返回最高的差异。

我想按绝对差的频率排序,所以不是按最高差排序,即[5, 5, 4, 4, 4, 3, 2, 1],而是输出[4, 4, 4, 5, 5, 3, 2, 1],因为4出现的频率更高。

【问题讨论】:

  • 删除 reverse=True 可能会有所帮助。
  • @wuerfelfreak 不,他不想按数字排序,他想按数字的频率排序。
  • 是的,你是对的。过度阅读。谢谢

标签: python python-3.x list sorting frequency


【解决方案1】:

尝试创建一个名为newl 的新列表,然后按照absolute 差异在newl 中出现的次数对lst 列表进行排序:

lst=[[3,7],[4,9],[8,3],[1,5],[9,4],[4,5],[3,0],[2,7],[1,9]]
newl = [abs(x - y) for x, y in lst]
print(sorted(lst, key=lambda x: -newl.count(abs(x[0] - x[1]))))

输出:

[[4, 9], [8, 3], [9, 4], [2, 7], [3, 7], [1, 5], [4, 5], [3, 0], [1, 9]]

【讨论】:

  • @Mohiuddin 没问题,如果可行,请接受并投票 :-)
  • 你能解释一下 print 语句,以便我可以扩展我的代码吗?我正在尝试根据相同的值(绝对差异)将列表拆分为子列表
  • @Mohiuddin 好的,所以在 print 语句中我执行了一个 sorted 函数,它对 lst 列表进行排序,并且我有一个 key 参数。向它声明的是它将如何对列表进行排序,它按照列表中两个数字的绝对差出现在newl 中的次数进行排序。
猜你喜欢
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多