python sort sorted 排序詳解

2021-07-12 04:55:38 字數 2309 閱讀 7650

python中,list型別內建了sort()方法用於排序。當然,python還有內建的全域性sorted()方法,用於可迭代序列的排序。這兩個方法大部分的用法是相同的,最大的不同在於,sort()方法不會生成乙個新的list,而是在原有的list上進行修改;sorted()方法則是生成乙個新的可迭代序列。

首先help一把list.sort()方法

in [1]: help(list.sort)

help on method_descriptor:

sort(...)

l.sort(cmp=none, key=none, reverse=false) -- stable sort *in place*;

cmp(x, y) -> -1, 0, 1

(end)

注:在python 3.x系列中,cmp引數已經被廢棄,由key引數指定即可。

list.sort()方法就可以對list進行排序。不過需要注意的是,此時原來的list將被修改。

in [2]: array=[5,3,1,7,9]

in [3]: array.sort()

in [4]: array

out[4]: [1, 3, 5, 7, 9]

使用的更廣泛的情況是用複雜物件的某些值來實現複雜物件的排序。

例如:

in [5]: persons=[['lindan','a',20],['chenlong','a',18],['tiantian','b',18]]

in [6]: list.sort(persons,key=lambda person:person[2])

in [7]: persons

out[7]: [['chenlong', 'a', 18], ['tiantian', 'b', 18], ['lindan', 'a', 20]]

使用operator模組

in [8]: persons=[['lindan','a',20],['chenlong','a',18],['tiantian','b',18]]

in [9]: from operator import itemgetter,attrgetter

in [10]: list.sort(persons,key=itemgetter(2))

in [11]: persons

out[11]: [['chenlong', 'a', 18], ['tiantian', 'b', 18], ['lindan', 'a', 20]]

也可以對某個擁有命名屬性的複雜物件進行排序(為了方便,使用sorted()方法,與list.sort()方法本質是一樣的)

class person:

def __init__(self,name,hierarchy,age):

self.name = name

self.hierarchy = hierarchy

self.age = age

def __repr__(self):

return repr((self.name,self.hierarchy,self.age))

#按年齡排序

def sort_age():

persons = [person('kobe','a',20),person('janes','a',18),person('tracy','b',18)]

p_age = sorted(persons,key = attrgetter('age'),reverse = true)

print p_age

#先按年齡,再按名字排序

def sort_age_hierarchy():

persons = [person('kobe','a',20),person('janes','a',18),person('tracy','b',18)]

p_sorted = sorted(persons,key = attrgetter('age','name'),reverse = true)

print p_sorted

if __name__ == '__main__':

sort_age()

sort_age_hierarchy()

結果如下:

[('kobe', 'a', 20), ('janes', 'a', 18), ('tracy', 'b', 18)]

[('kobe', 'a', 20), ('janes', 'a', 18), ('tracy', 'b', 18)]

Python sort sorted函式詳解

一 sort函式 sort函式是序列的內部函式 函式原型 l.sort cmp none,key none,reverse false 函式作用 它是把l原地排序,也就是使用後並不是返回乙個有序的序列副本,而是把當前序列變得有序 引數說明 1 cmp引數 cmp接受乙個函式,拿整形舉例,形式為 de...

Python sort sorted函式詳解

一 sort函式 sort函式是序列的內部函式 函式原型 l.sort cmp none,key none,reverse false 函式作用 它是把l原地排序,也就是使用後並不是返回乙個有序的序列副本,而是把當前序列變得有序 引數說明 1 cmp引數 cmp接受乙個函式,拿整形舉例,形式為 de...

Python sort sorted函式詳解

一 sort函式 sort函式是序列的內部函式 函式原型 l.sort cmp none,key none,reverse false 函式作用 它是把l原地排序,也就是使用後並不是返回乙個有序的序列副本,而是把當前序列變得有序 引數說明 1 cmp引數 cmp接受乙個函式,拿整形舉例,形式為 de...