Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Python 3中的自定义排序_Java_Python_Sorting - Fatal编程技术网

Java Python 3中的自定义排序

Java Python 3中的自定义排序,java,python,sorting,Java,Python,Sorting,我开始学习Python 3。 我想知道如何执行自定义排序。例如,我可能希望按以下方式对动物列表进行排序:按第一个字符升序排序,然后按长度降序排序,然后按字母数字升序排序 一个由“蚂蚁”、“羚羊”、“斑马”、“食蚁兽”组成的列表,如果正确排序,将变成“食蚁兽”、“羚羊”、“蚂蚁”、“斑马” 我已经读了一些文档,但是没有完全理解sort方法的“key”参数。有什么例子吗? 附:这不是一个大学作业问题。我只是想玩一下python 我很久很久以前就学会了java,可能已经实现了如下自定义排序: imp

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

一个由“蚂蚁”、“羚羊”、“斑马”、“食蚁兽”组成的列表,如果正确排序,将变成“食蚁兽”、“羚羊”、“蚂蚁”、“斑马”

我已经读了一些文档,但是没有完全理解sort方法的“key”参数。有什么例子吗? 附:这不是一个大学作业问题。我只是想玩一下python

我很久很久以前就学会了java,可能已经实现了如下自定义排序:

import java.util.*;
公共类sortDemo实现了Comparator{
公共静态void main(字符串[]args){
ArrayList动物=新的ArrayList();
动物。添加(“蚂蚁”);
动物。添加(“羚羊”);
动物。添加(“斑马”);
动物。添加(“食蚁兽”);
用于(字符串a:动物){
系统输出打印项次(a);
}
System.out.println();
//要输出的是羚羊、羚羊、蚂蚁、斑马以下的种类
Collections.sort(动物,新的sortDemo());
用于(字符串a:动物){
系统输出打印项次(a);
}
}
公共整数比较(字符串s1、字符串s2){
如果(s1.字符(0)>s2.字符(0)){
返回1;
}如果(s1.字符(0)=s2.字符(0)){
如果(s1.length()
排序键是一个函数,给定一个列表元素,它返回一个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)
具有较小键的项在排序列表中总是出现在前面。因此,一个较小的初始字符会使动物来得更早。如果两个名字的首字母相同,名字长度越长,动物的名字越早出现,因为负名字长度越小。最后,如果两种动物的名字具有相同的首字母和长度,则按字典顺序打破这种联系

此程序演示如何使用上述键函数对列表进行排序:

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)
Python文档给出了

也就是说:

animals = ["Anteater", "Aardvark", "Eagle", "Platypus"]
sorted(animals, key=lambda animal: animal[2])
['Platypus', 'Eagle', 'Aardvark', 'Anteater']

这里的关键是每个动物名字的第三个字母。我使用lambda函数将第三个字母作为键
lambda:animal:animal[2]
。这个lambda函数允许我指定第三个字母,因为我不能只说
key=animal[2]
,因为animal是未定义的。

这些字母非常简单。听起来你的比较很复杂,这意味着
cmp\u to\u key
可能就是你要找的(搜索文档)。很好!我从来没有想过使用一个列表来达到这样的目的,这确实让事情变得容易多了!顺便说一句,你不必返回一个列表,tuple也会做同样的事情!你说得很对。元组作为排序键在概念上更好,因为它是不可变的。我已经相应地编辑了我的答案。