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])

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在使用時必須提供一個排序過程總調用的函數:

'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流群:
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
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)

要注意,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()方法使用基礎
分享鏈接:http://m.kartarina.com/article38/dsoggpp.html

成都網站建設公司_創新互聯,為您提供靜態網站服務器托管域名注冊網頁設計公司移動網站建設定制網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 日日摸夜夜爽无码毛片精选| 日韩中文无码有码免费视频| 亚洲无码日韩精品第一页| 精品少妇人妻AV无码专区不卡 | 2014AV天堂无码一区| 久久精品中文无码资源站| 毛片亚洲AV无码精品国产午夜| 亚洲成a人在线看天堂无码| 色综合久久久久无码专区| 亚洲精品无码专区在线在线播放 | 人妻少妇乱子伦无码专区| 亚洲AV无码久久| 国产免费无码AV片在线观看不卡| 久久午夜夜伦鲁鲁片免费无码影视| 丰满少妇人妻无码| 精品国产v无码大片在线观看| 92午夜少妇极品福利无码电影| 国产麻豆天美果冻无码视频| 人妻少妇无码视频在线| 色窝窝无码一区二区三区成人网站| 亚洲AV无码成人专区| 亚洲AV无码国产精品色| 蜜芽亚洲av无码一区二区三区| 免费看成人AA片无码视频羞羞网| 久久人妻av无码中文专区| 无码福利一区二区三区| 亚洲人成无码网站| 日韩人妻无码精品专区| 免费无码午夜福利片69| 久久久无码精品人妻一区| 亚洲AV无码无限在线观看不卡 | 久久成人无码国产免费播放| 久久99久久无码毛片一区二区 | 亚洲人成无码网站久久99热国产| 一本色道无码道DVD在线观看| 无码精品A∨在线观看| 亚洲自偷自偷偷色无码中文| 台湾无码AV一区二区三区| 中文字幕无码久久人妻| 亚洲日韩精品A∨片无码| 亚洲精品无码专区在线在线播放|