Python中的sort怎麼使用?

ADVERTISEMENT

Python中的sort怎麼使用?

一、基本形式


 sorted(iterable[, cmp[, key[, reverse]]])
 iterable.sort(cmp[, key[, reverse]])

參數解釋:

(1)iterable指定要排序的list或者iterable,不用多說;

(2)cmp為函數,指定排序時進行比較的函數,可以指定一個函數或者lambda函數,如:

students為類對象的list,沒個成員有三個域,用sorted進行比較時可以自己定cmp函數,例如這里要通過比較第三個數據成員來排序,代碼可以這樣寫:


 students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
 sorted(students, key=lambda student : student[2])

(3)key為函數,指定取待排序元素的哪一項進行排序,函數用上面的例子來說明,代碼如下:


 sorted(students, key=lambda student : student[2])
ADVERTISEMENT

key指定的lambda函數功能是去元素student的第三個域(即:student[2]),因此sorted排序時,會以students所有元素的第三個域來進行排序。

二、普通用法:

1.原址排序

1)列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。


 x = [4, 6, 2, 1, 7, 9]
 x.sort()
 print x # [1, 2, 4, 6, 7, 9]

2.副本排序

1)[:]分片方法


 x =[4, 6, 2, 1, 7, 9]
 y = x[ : ]
 y.sort()
 print y #[1, 2, 4, 6, 7, 9]
 print x #[4, 6, 2, 1, 7, 9]

注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。

2)sorted方法

sorted返回一個有序的副本,並且類型總是列表,如下:


 x =[4, 6, 2, 1, 7, 9]
 y = sorted(x)
 print y #[1, 2, 4, 6, 7, 9]
 print x #[4, 6, 2, 1, 7, 9] 
 print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']

三、高級用法

1.自定義cmp比較函數


 def comp(x, y):
 if x < y:
 return 1
 elif x > y:
 return -1
 else:
 return 0
 nums = [3, 2, 8 ,0 , 1]
 nums.sort(comp)
 print nums # 降序排序[8, 3, 2, 1, 0]
 nums.sort(cmp) # 調用內建函數cmp ,升序排序
 print nums # 降序排序[0, 1, 2, 3, 8]

2.自定義key和reverse

1.reverse實現降序排序,需要提供一個布爾值,默認為False(升序排列)。

2.key在使用時必須提供一個排序過程總調用的函數:


 alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
 # 多級排序,先按照第3個元素排序,然後按照第2個元素排序:
 print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
 -------------------------------------------------------------------------------------------
 [('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]

四、operator.itemgetter函數

operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數為一些序號(即需要獲取的數據在對象中的序號),下面看例子。


 a = [1,2,3]
 >>> b=operator.itemgetter(1) //定義函數b,獲取對象的第1個域的值
 >>> b(a)
 2
 >>> b=operator.itemgetter(1,0) //定義函數b,獲取對象的第1個域和第0個的值
 >>> b(a)
 (2, 1)
ADVERTISEMENT

要注意,operator.itemgetter函數獲取的不是值,而是定義了一個函數,通過該函數作用到對象上才能獲取值。

itemgetter在sort中的用法:


 from operator import itemgetter
 alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
 # 多級排序,先按照第3個元素排序,然後按照第2個元素排序:
 print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False)
 print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False)
 print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False)
 --------------------------------------------------------------------------------------------------
 [('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
 [('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
 [('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]

以上所述是小編給大家介紹的Python中的sort()方法使用基礎 ,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回複大家的!


本文地址:
ADVERTISEMENT
ADVERTISEMENT