一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python中的sort()方法使用基礎(chǔ)教程

Python中的sort()方法使用基礎(chǔ)教程

2020-09-16 13:47路永遠(yuǎn)在腳下 Python

這篇文章主要介紹了Python中的sort()方法使用基礎(chǔ)教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

一、基本形式

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

 參數(shù)解釋:

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

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

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

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

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

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

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

二、普通用法:

 1.原址排序

1)列表有自己的sort方法,其對列表進(jìn)行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因?yàn)樵M是不可修改的。

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

2.副本排序

1)[:]分片方法

?
1
2
3
4
5
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還是指向同一個列表,并沒有產(chǎn)生新的副本。

2)sorted方法

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

?
1
2
3
4
5
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比較函數(shù)

?
1
2
3
4
5
6
7
8
9
10
11
12
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) # 調(diào)用內(nèi)建函數(shù)cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]

2.自定義key和reverse

1.reverse實(shí)現(xiàn)降序排序,需要提供一個布爾值,默認(rèn)為False(升序排列)。

2.key在使用時必須提供一個排序過程總調(diào)用的函數(shù):

?
1
2
3
4
5
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函數(shù)

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

?
1
2
3
4
5
6
7
a = [1,2,3]
>>> b=operator.itemgetter(1)   //定義函數(shù)b,獲取對象的第1個域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定義函數(shù)b,獲取對象的第1個域和第0個的值
>>> b(a)
(2, 1)

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

itemgetter在sort中的用法:

?
1
2
3
4
5
6
7
8
9
10
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()方法使用基礎(chǔ) ,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

原文鏈接:http://www.cnblogs.com/sunny3312/archive/2017/01/07/6260472.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产亚洲成归v人片在线观看 | 99精品国产高清自在线看超 | 成人在线一区二区三区 | 4p高h三男一女| jk制服白丝超短裙流白浆 | 视频精品一区二区三区 | 欧美性野久久久久久久久 | 天天舔天天干 | 精品网站 | aa一级护士医生毛片 | 日韩欧美综合在线二区三区 | 久久精品热在线观看85 | 国产免费专区 | 香蕉久久夜色精品国产小优 | 美女被狂干 | 精品9e精品视频在线观看 | 福利久草| 99久久精品自在自看国产 | 91精品国产91热久久久久福利 | 午夜AV亚洲一码二中文字幕青青 | 国产精品视频免费一区二区三区 | 四虎影院地址 | www.亚洲视频 | 男人最爱看的网站 | 婷婷综合缴情亚洲五月伊 | 精品久久久久久亚洲 | 国产99视频精品免视看9 | 大胸被c出奶水嗷嗷叫 | 99精品久久精品一区二区 | 999任你躁在线精品免费不卡 | 日本大巴车强thepro | 亚洲av欧美在我 | 免费观看欧美成人h | 深夜福利免费在线观看 | 99久久中文字幕伊人 | 亚洲色欲色欲综合网站 | 美女被视频 | 国产一区二区精品久久 | caoporm国产精品视频免费 | 免费欧美视频 | 黑人日白人 |