Python中的排序方法
阿新 • • 發佈:2019-03-01
name key 一個 是個 成績 詳細 pytho ted def
1 list.sort
list.sort(key=None, reverse=False)
該方法只能用於list。就地排序,原來的list被修改。key的用法見下文。reverse控制降序還是生序,默認是升序(key為None的前提下。如果key指定了順序,則reverse=True時采取相反順序)
print(a)
a.sort()
print(a)
a.sort(reverse=True)
print(a)
輸出如下:
[4, 6, 1, 234, 87]
[1, 4, 6, 87, 234]
[234, 87, 6, 4, 1]
2 sorted()
sorted(iterable, *, key=None, reverse=False)
該方法適用於一切可叠代的對象。返回一個新的排好序的列表。該排序是穩定排序。
a = [4, 6, 1, 234, 87]
print(a)
print(sorted(a))
輸出
[4, 6, 1, 234, 87]
[1, 4, 6, 87, 234]
3 key
現在詳細說下參數key
key必須是個函數,且是接受一個參數的函數。返回key,作為排序時的比較對象。
比如:key=str.lower
下面這個對元組排序
student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] print(sorted(student_tuples, key=lambda student: student[2]) )
根據元組中第3個元素進行比較,結果是:
[(‘dave‘, ‘B‘, 10), (‘jane‘, ‘B‘, 12), (‘john‘, ‘A‘, 15)]
對類對象的排序
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)) student_objects = [ Student('john', 'A', 15), Student('jane', 'B', 12), Student('dave', 'B', 10), ] print(sorted(student_objects, key=lambda student: student.age))
結果: [(‘dave‘, ‘B‘, 10), (‘jane‘, ‘B‘, 12), (‘john‘, ‘A‘, 15)]
4 operator 提供的便捷方法
改寫上面的例子
from operator import itemgetter, attrgetter
sorted(student_tuples, key=itemgetter(2))
sorted(student_objects, key=attrgetter('age'))
根據多個值排序(比如先根據成績排序,成績一樣的再根據年齡排序)
sorted(student_tuples, key=itemgetter(1,2))
sorted(student_objects, key=attrgetter('grade', 'age'))
最後一個例子:
students = ['dave', 'john', 'jane']
newgrades = {'john': 'F', 'jane':'A', 'dave': 'C'}
print(sorted(students, key=newgrades.__getitem__))
結果: [‘jane‘, ‘dave‘, ‘john‘]
Python中的排序方法