我几天前才开始学习Python,并希望在其中实现我的小项目。我需要按照数字值的降序,对包含一个字符串和一个整数的列表进行排序,但如果数字对于多个元组相同,则按字母顺序排序。所以我有一个列表,比如:
tuples = [('ggg', 5), ('aaa', 5), ('bbb', 6), ('zzz', 6)]
tuples.sort(key=lambda score: score[1], reverse=True)
这将返回:
[('bbb', 6), ('zzz', 6), ('ggg', 5), ('aaa', 5)]
我希望你能帮我翻译以下内容:但我想要得到的是:
[('bbb', 6), ('zzz', 6), ('aaa', 5), ('ggg', 5)]
在Java中,我刚刚为自定义元组实现了一个比较器:
class Pair {
public final String s;
public final Integer i;
public Pair(String s, Integer i) {
this.s = s;
this.i = i;
}
}
class PairComparator implements Comparator<Pair> {
@Override
public int compare(Pair p1, Pair p2) {
int c = p1.i.compareTo(p2.i);
return (c == 0) ? p1.s.compareTo(p2.s) : c * (-1);
}
}
但我不确定如何在 Python 的一个 lambda
表达式中完成这个任务。
sort
(和max
&min
)提供自定义比较函数参数,但这在 Python 3 中已被淘汰,因为它效率较低:自定义键函数只需要为每个键调用一次,但自定义比较函数会在每次比较时都被调用。 - PM 2Ringsort
(也称为Timsort)是稳定的,因此当您具有复杂的排序要求时,可能只需使用不同的键多次对列表进行排序,而无需使用自定义比较。 - PM 2Ring