如何在python中基于两个条件对数组排序
我有以下数组:如何在python中基于两个条件对数组排序,python,sorting,Python,Sorting,我有以下数组: [[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]] x[0]和x[1]==1 这是一个逻辑表达式,其计算结果要么为真(如果x[0]!=0且x[
[[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]]
x[0]和x[1]==1
这是一个逻辑表达式,其计算结果要么为真(如果x[0]!=0且x[1]==1),要么为假。因此,排序键只能接受两个可能的值
据我所知,你想要的是:
x[1]==1的所有情况下,
x[1]!=1
- 根据上述要求,输出按
x[0]
[-Inf,0]
和[Inf,0]
之间的可能输入范围,以及[-Inf,1]
和[Inf,1]
之间的范围
每个范围在两个方向上都是无限大的。如果您想用一维键对它们进行排序,您需要将两个双亲无限范围映射到一行数字上
这并不是不可能的——如果你真的必须这样做,那么你可以使用一些技巧来实现这一点。但这是一个非常迂回的解决问题的方法
仅仅使用二维键就容易多了。sort函数首先检查元组的第0个位置,并且作为一个tiebreaker只进入第一个位置。因此,由于x[1]
的值以您想要的排序顺序优先,因此元组的第0个条目基于x[1]
,第一个条目基于x[0]
,如下所示:
x=[[8,1]、[1,1]、[3,1]、[8,1]、[4,0]、[2,0]]
已排序(x,key=lambda x:(x[1]==1,x[0]))
输出:
[[2, 0], [4, 0], [1, 1], [3, 1], [8, 1], [8, 1]]
您期望的输出是什么?实际上,我希望数组根据第一个元素和x中的元素进行排序,其中
x[I][1]
==1位于最后一个如果您也添加了期望的输出会很有用,解释仍然不清楚,谢谢,它在更换电源后工作order@Tonystark除了更改顺序之外,另一个重要的部分是,您的键现在是一个元组,而不是单个值。排序时元组和单个值之间的区别是什么。我们还可以在元组中添加更多的条件吗?@Tonystark我将在回答中详细介绍这个问题,请稍等。@Tonystark我不确定您对添加更多条件有何要求。