Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
python sorted()是否查看第一个参数而忽略其余参数?_Python_Sorting - Fatal编程技术网

python sorted()是否查看第一个参数而忽略其余参数?

python sorted()是否查看第一个参数而忽略其余参数?,python,sorting,Python,Sorting,最后两行中打印语句的结果相同。在第一个变量之后添加更多变量是否会产生影响 class Student: def __init__(self, name, grade, age): self.name = name self.grade = grade self.age = age def __repr__(self): return re

最后两行中打印语句的结果相同。在第一个变量之后添加更多变量是否会产生影响

class Student:
        def __init__(self, name, grade, age):
                self.name = name
                self.grade = grade
                self.age = age
        def __repr__(self):
                return repr((self.name, self.grade, self.age))
        def weighted_grade(self):
                return 'CBA'.index(self.grade) / float(self.age)

student_objects = [
        Student('john', 'A', 15),
        Student('jane', 'B', 12),
        Student('dave', 'B', 10),
]

print sorted(student_objects, key=lambda student: student.age)
print sorted(student_objects, key=lambda student: (student.age, student.grade))
我总是很紧张

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

我原以为约翰得了“A”级,会把他推到别的地方。或者我应该添加更多的学生对象和/或字段吗

您试图按照key函数中给出的元组进行排序,它将按照第一个元素进行排序,对于第一个元素相等的元组,则按照第二个元素进行排序,依此类推。因为他们都有独特的年龄,所以只需按年龄排序即可。如果您选择student.grade、student.age,则“john”将排在第一位,然后是现在出现的“dave”和“jane”。

在交互式Python解释器中编写帮助排序,它将向您显示相关文档。为什么它会给出您预期的输出?在你的例子中,没有让分数产生任何影响的平局。@roganjosh说的是再试一次,但要让dave和john有相同的年龄。在第二种排序中,你的关键是年龄,等级,这意味着它首先按年龄排序,然后按等级作为平局打破者排序。由于所有年龄段都不同,因此不需要排序键的第二部分。如果它的行为有所不同,那真的没有任何意义。结果是正确的。约翰是年龄最大的人,所以他会排在最后。也许你应该先按年级再按年龄排序:打印排序的学生对象,key=lambda学生:student.grade,student.age?因此,有A的人会先来,其余的按年龄排序。OP并不是要对元组进行排序。他们对自定义对象列表进行排序,并按对象属性进行排序。他们使用的关键是元组。因此,它们对从对象属性创建的元组进行排序,这些属性与对象相对应。@roganjosh我认为Sebastian试图说明的一点是,提供键函数基本上表示排序,就好像这些对象看起来像这些元组一样。好吧,我肯定不是这样读的。请添加排序方式,我将删除我的否决票。对元组进行排序不是他们正在做的事情。按键函数中给定的元组进行排序是否更有意义?