B M*_*zie 6 python java sorting
我开始学习Python 3.我想知道如何执行自定义排序.例如,我可能想要按以下方式对动物列表进行排序:按第一个字符升序排序,然后按长度降序排序,然后按字母数字升序排序.
当正确分类时,由"蚂蚁","羚羊","斑马","食蚁兽"组成的列表将成为"食蚁兽","羚羊","蚂蚁","斑马".
我已经阅读了一些关于文档但是没有完全获得sort方法的"关键"参数.任何例子?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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
排序键是一个函数,给定一个list元素,返回一个Python知道如何本地比较的值.例如,Python知道如何比较整数和字符串.
Python还可以比较由它知道如何比较的事物组成的元组和列表.比较元组和列表的方式是元组或列表中的早期项目优先于后面的值,就像您期望的那样.
在您的情况下,您可能希望进行以下键功能:
lambda name: (name[0], -len(name), name)
Run Code Online (Sandbox Code Playgroud)
具有较小键的项目总是在排序列表中较早出现.因此,较小的初始特征会使动物更早出现.如果两个名称具有相同的首字母,则较长的名称长度会导致动物更早出现,因为负名称长度较小.最后,如果两个动物的名字具有相同的初始和相同的长度,则通过词典顺序打破平局.
该程序演示了如何使用上述键功能对列表进行排序:
animals = ["ant", "antelope", "zebra", "anteater", "cod", "cat"]
animals.sort(key=lambda name: (name[0], -len(name), name))
print(animals)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |