python - 如何根据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]]
解决方案
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]
这些范围中的每一个在两个方向上都是无限大的。如果你想用一维键对它们进行排序,你需要以某种方式将两个双端无限范围映射到一个数轴上。
这不是不可能的——如果你真的必须这样做,你可以使用一些技巧来实现它。但这是解决问题的一种非常迂回的方式。
使用二维键要容易得多。sort 函数首先检查元组的第零个位置,并且仅作为决胜局进入第一个位置。因此,因为 的值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]]
推荐阅读
- ios - 浏览场景委托
- python - 计算唯一行的总数并将值保存在新列中
- python - app = Flask(__name__) TypeError: 'module' object is not callable
- android - 如何将您在 Android Studio 中制作的应用程序发布到 Google Play?
- java - 如何通过邮递员连接到主题/队列以获取 Spring Boot WebSocket 应用程序?
- karate - 空手道 - 无法通过正确的标题进行授权
- python - Python Null-Safe IN(子字符串)和 LEN(长度)
- pandas - 基于具有列表值的两列获取相关列
- javascript - 如何添加 if 和 else 语句,以便在加载当前电影时为我提供相关电影?
- reactjs - 表的reacjs列中的依赖列更改