python學習-序列排序


python的排序中,可以使用內置的sort()來對序列進行排序,也可以使用內置的sorted()函數對序列進行排序,區別是,當使用sort()時,是對原序列進行排序,而sorted()則是生成一個新的序列。

1、采用sorted()對序列進行排序,返回一個新的序列

1 #使用sorted()函數對序列進行排序
2 x = [5,2,3,1,4]
3 y = sorted(x)
4 print(y)   #[1, 2, 3, 4, 5]
5 print(id(x))   #1576453618504
6 print(id(y))   #1576446734280

2、采用內置的sort()對序列進行排序,返回值為None,對原序列進行排序

1 #使用sort()對序列進行排序
2 a = [5,2,3,1,4]
3 a.sort()
4 print(a)    #[1, 2, 3, 4, 5]

通常sort()並沒有sorted()方便,但是當不需要原序列時,sort()也還可以。

從python2.4開始,list.sort()和sorted()增加了一個key參數,從而對排序規則進行定義

1 #定義key值對序列進行排序
2 lst = sorted('This is a test string from Andrew'.split(),key=str.lower)
3 print(lst)   #['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

注意:key參數的值應該是一個函數,它接受一個參數並返回一個用於排序目的的鍵。 這種技術速度很快,因為每個輸入記錄只需要調用一次關鍵函數。

當需要對一些復雜的對象進行排序時,可以采用復雜對象里面的一些參數作為排序的參數:

1 #復雜對象的排序
2 student_tuple = [
3     ('john','A',15),
4     ('jane','B',12),
5     ('dave','B',10),
6     ]
7 lst = sorted(student_tuple,key=lambda student:student[2])   #按照年齡排序
8 print(lst)   #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

同樣的技術適用於具有命名屬性的對象:

 1 #復雜對象的排序:
 2 class Student:
 3     def __init__(self,name,grade,age):
 4         self.name = name
 5         self.grade = grade
 6         self.age = age
 7     def __repr__(self):
 8         return repr((self.name,self.grade,self.age))
 9     def weighted_grade(self):
10         return 'CBA'.index(self.grade)/float(self.age)
11 student_objects = [
12     Student('john','A',15),
13     Student('jane','B',12),
14     Student('dave','B',10),
15     ]
16 lst = sorted(student_objects,key=lambda student:student.age)
17 print(lst)   #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

上面采用的key值的方式對序列進行排序,在python中還提供更快更簡單的排序函數,也就是operator模塊,其中的itemgetter、attrgetter以及在python2.6中出現的methodcaller

 未完待續

 

 

 

yang

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM