python-3.x - 比较器函数可以由python中的“和”连接的两个条件组成(用于排序)吗?
问题描述
我有一个类型列表:
ans=[(a,[b,c]),(x,[y,z]),(p,[q,r])]
我需要使用以下条件对列表进行排序:
if (ans[j][1][1]>ans[j+1][1][1]) or (ans[j][1][1]==ans[j+1][1][1] and ans[j][1][0]<ans[j+1][1][0]):
# do something (like swap(ans[j],ans[j+1]))
我能够使用气泡来实现sort
,但我想要一种更快的排序方法。有没有办法在与我的情况有关的情况下使用sort()
或sorted()
(使用比较器或类似的东西)函数对我的列表进行排序?
解决方案
您可以创建一个返回元组的比较器函数;元组从左到右进行比较,直到其中一个元素比另一个“大”。您的输入/输出示例非常缺乏,但我相信这会产生您想要的结果:
def my_compare(x):
return x[1][1], x[1][0]
ans.sort(key=my_compare)
# ans = sorted(ans, key=my_compare)
本质上,这将首先比较 和 的x[1][1]
值ans[j]
,ans[j+1]
如果相同,则将比较该x[1][0]
值。如果这与您的 ues 情况不完全匹配,您可以根据需要重新排列和添加更多比较器。
推荐阅读
- c - 为什么不能在 C 中使用指针?比如 char *str 替换gets(str)中的char str[40]
- python - 用文字完美填充图像
- python - 在每行以“#”开头的数据框列中查找单词,然后将它们添加到新列中
- asp.net - 从包含 2 个模型的类中访问属性
- docker - 在带有 NFS 卷的 Docker Swarm 中运行 LDAP,在 slapd/run 获得状态 0
- python - KilledWorker 异常
- python - 使用 oauth2 的烧瓶登录会话不起作用
- electron-builder - 无法下载应用程序
- sql-server - 加速将数据从 SQL Server 引用/导入 Excel 的代码
- python - 如何在 Python 中将 JSON 字符串值转换为小写?