Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中基于两个条件对数组排序_Python_Sorting - Fatal编程技术网

如何在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我不确定您对添加更多条件有何要求。