gpt4 book ai didi

java - Python 3 中的自定义排序

转载 作者:太空狗 更新时间:2023-10-30 00:55:18 26 4
gpt4 key购买 nike

我正开始学习 Python 3。我想知道如何执行自定义排序。例如,我可能想按以下方式对动物列表进行排序:按第一个字符升序排序,然后按长度降序排序,然后按字母数字升序排序。

由“ant”、“antelope”、“zebra”、“anteater”组成的列表在正确排序后将变为“anteater”、“antelope”、“ant”、“zebra”。

我已经阅读了一些文档,但不太了解排序方法的“关键”参数。有什么例子吗?PS:这不是大学作业问题。我只是想尝试一下 python。

我很久很久以前学过 java,可能已经实现了如下所示的自定义排序:

import java.util.*;

public class sortDemo implements Comparator<String> {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<String>();
animals.add("ant");
animals.add("antelope");
animals.add("zebra");
animals.add("anteater");

for (String a:animals){
System.out.println(a);
}
System.out.println();

// want output to be anteater, antelope, ant, zebra following the sort
Collections.sort(animals, new sortDemo());

for (String a:animals){
System.out.println(a);
}
}

public int compare(String s1, String s2) {
if (s1.charAt(0) > s2.charAt(0)){
return 1;
} else if (s1.charAt(0) == s2.charAt(0)){
if(s1.length() < s2.length()) {
return 1;
} else if (s1.length() == s2.length()) {
return s1.compareTo(s2);
} else {
return -1;
}
} else {
return -1;
}
}
}

最佳答案

排序键是一个函数,给定一个列表元素,返回一个 Python 知道如何本地比较的值。例如,Python 知道如何比较整数和字符串。

Python 还可以比较由它知道如何比较的事物组成的元组和列表。比较元组和列表的方式是元组或列表中较早的项目优先于较晚的值,正如您所期望的那样。

在您的情况下,您需要实现以下关键功能:

lambda name: (name[0], -len(name), name)

具有较小键的项目在排序列表中总是较早出现。因此,较小的初始字符会导致动物出现得更早。如果两个名字的首字母相同,则较长的名字长度会导致动物出现得更早,因为负的名字长度较小。最后,如果两个动物的名字首字母相同且长度相同,则按字典顺序打破并列。

这个程序演示了如何使用上面的键函数对列表进行排序:

animals = ["ant", "antelope", "zebra", "anteater", "cod", "cat"]

animals.sort(key=lambda name: (name[0], -len(name), name))

print(animals)

关于java - Python 3 中的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29726068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com