如何基于python中的两个条件对数组进行排序

托尼·斯塔克

我有以下数组:

[[8, 1], [1, 1], [3, 1], [8, 1], [4, 0], [2, 0]]

如何根据元素的第一个值以及如果第二个元素等于1对数组进行排序,我尝试了以下方法,

sorted(x,key=lambda x:(x[0] and x[1]==1))

但是我得到了这个结果:

[[10, 0], [5, 0], [5, 1], [2, 1], [1, 1], [8, 1]]
杰弗里·布伦特(Geoffrey Brent)
x[0] and x[1] == 1

这是一个逻辑表达式,其结果为True(如果x [0]!= 0且x [1] == 1)或False。因此,您的排序键只能采用两个可能的值。

据我了解,您想要的是:

  • 在所有情况x[1] == 1之后出现的所有情况x[1] != 1
  • 除上述内容外,输出应按 x[0]

使用一维密钥无法轻松做到这一点。要理解为什么,想想可能的输入之间的范围内[-Inf,0][Inf,0]之间的范围[-Inf,1][Inf,1]

这些范围中的每个在两个方向上都无限大。如果要使用一维键对它们进行排序,则需要以某种方式将两个双端无限范围映射到一条数字线上。

这并非不可能-如果您确实必须那样做,可以使用一些技巧来实现这一目标。但这是解决问题的一种非常round回的方法。

仅使用二维键会容易得多。排序功能首先检查一个元组的第零个位置,并且仅在决胜局中转到第一个位置。因此,因为值x[1]按您想要的排序顺序优先,所以元组的第零个条目基于,x[1]而第一个条目基于x[0],如下所示:

x=[[8, 1], [1, 1], [3, 1], [8, 1], [4, 0], [2, 0]]
sorted(x,key=lambda x:(x[1]==1,x[0]))

输出:

[[2, 0], [4, 0], [1, 1], [3, 1], [8, 1], [8, 1]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在两个条件下对数组进行排序

按两个条件对数组进行排序

如何基于两个条件对数据进行子集

如何使用 MergeSort 按两个或多个条件对数组进行排序?

通过两个不同的条件对数组中的对象进行排序

使用两个条件对数组进行自定义排序

按两个条件对数据进行排序?

如何按这些数组的两个元素对数组进行排序?

如何基于多个条件对数组进行排序?

按角度的两个属性对数组进行排序

如何在Python中基于两个元素对列表进行排序?

如何使用两个条件对数据集的行信息进行排序

在Matlab中基于两个日期时间数组对数据进行逻辑索引

如何基于两个数组和条件对numpy数组进行排序

根据两个属性的值对数组中的对象进行排序

如何基于两个变量对数据进行子集

在两个条件下对基于字符串的数组进行排序

如何使用两个条件在 Python 中对列表进行排序?

Python:基于第一个元素对数组中的元组进行排序

如何对向量进行排序并仅使用基于条件的两个相邻值

Python-如何基于字典对数组中的值进行排序和替换

基于两个条件的排序算法

如何基于两个参数但顺序不同的python进行排序

给定两个未排序的数组 A 和 B ,通过只对数组中的一个进行排序,找到总和(或差)等于给定 k 的一对元素

如何对具有两个条件的列表进行排序

使用两个条件对Python ZIP进行排序?

基于另一个数组索引在 PHP 中对数组进行排序

首先基于另一个数组对数组中的值进行排序

基于javascript中的另一个数组对数组对象进行排序