首页 > 解决方案 > 比较器函数可以由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()(使用比较器或类似的东西)函数对我的列表进行排序?

标签: python-3.xsortingcomparison

解决方案


您可以创建一个返回元组的比较器函数;元组从左到右进行比较,直到其中一个元素比另一个“大”。您的输入/输出示例非常缺乏,但我相信这会产生您想要的结果:

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 情况不完全匹配,您可以根据需要重新排列和添加更多比较器。


推荐阅读