首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据它们绝对差异的频率对python列表进行排序

根据它们绝对差异的频率对python列表进行排序
EN

Stack Overflow用户
提问于 2021-01-11 13:40:14
回答 1查看 76关注 0票数 3

我有一份清单,

代码语言:javascript
复制
lst=[[3,7],[4,9],[8,3],[1,5],[9,4],[4,5],[3,0],[2,7],[1,9]] 

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

代码语言:javascript
复制
|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, 

输出应为:

代码语言:javascript
复制
[[4,9],[8,3],[9,4],[2,7],[3,7],[1,5],[4,5],[3,0],[1,9]]

我正在做:

代码语言:javascript
复制
list.sort(key=self.SortByDifference,reverse=True)

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

但是,这还是最高的差价。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-11 13:45:06

尝试创建一个名为newl的新列表,然后根据abs解决方案差异在newl中出现的次数对newl列表进行排序

代码语言:javascript
复制
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]))))

输出:

代码语言:javascript
复制
[[4, 9], [8, 3], [9, 4], [2, 7], [3, 7], [1, 5], [4, 5], [3, 0], [1, 9]]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65661848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档