Python序列排序的具體場(chǎng)景實(shí)現(xiàn)
python中,一般在涉及到列表排序時(shí),都用內(nèi)置的sort()方法或者全局的sorted()方法,區(qū)別如下:
1、sort()方法只能用于列表排序,不能用于字符串,字典等其他可迭代序列;sorted()方法可以用于所有的可迭代序列;
2、sort()方法是在原列表基礎(chǔ)上進(jìn)行排序,返回None,會(huì)破壞原始列表結(jié)構(gòu);sorted()方法是返回一個(gè)排序后的新序列,對(duì)原始列表無(wú)影響;
#sort()排序 >>> a=[6,9,8,4,3,1,2] >>> b=a.sort() >>> print(b) None >>> print(a) [1, 2, 3, 4, 6, 8, 9] #sorted()排序 >>> a=[6,9,8,4,3,1,2] >>> b=sorted(a) >>> print(b) [1, 2, 3, 4, 6, 8, 9] >>> print(a) [6, 9, 8, 4, 3, 1, 2]
字典排序時(shí),sorted()方法默認(rèn)是按照字典的鍵(key)排序的,如下:
>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'}
>>> b=sorted(a)
>>> print(b)
[1, 2, 3, 4, 5]
如果需要按照字典的value排序,可以用下面的方法:
>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'}
>>> b=sorted(a.items(), key=lambda item:item[1])
>>> print(b)
[(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]
高級(jí)用法
sort()方法和sorted()方法都可以指定參數(shù)來(lái)處理一些復(fù)雜場(chǎng)景的排序
1、key參數(shù):指定一個(gè)函數(shù),可以是內(nèi)置函數(shù),也可以是自己定義的函數(shù),此函數(shù)將在每個(gè)元素比較前被調(diào)用。
2、reverse參數(shù):此參數(shù)指定True or False,來(lái)進(jìn)行降序或者升序,默認(rèn)為False(升序)。
如下:
a = ["This", "A", "is", "bag"] b = sorted(a, key=str.lower) c = sorted(a, key=str.lower, reverse=True) print(b) print(c) ['A', 'bag', 'is', 'This'] ['This', 'is', 'bag', 'A']
更廣泛的使用情況是用復(fù)雜對(duì)象的某些值來(lái)對(duì)復(fù)雜對(duì)象的序列排序,例如:
一個(gè)列表保存著每個(gè)學(xué)生的姓名,檔次和分?jǐn)?shù)
#學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流群:531509025
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96)
]
場(chǎng)景1、按檔次從高到低進(jìn)行排序
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: student[1]))
[('john', 'A', 96), ('andy', 'A', 92), ('cany', 'A', 96), ('jane', 'B', 82), ('dave', 'B', 85), ('leky', 'D', 63)]
場(chǎng)景2、按分?jǐn)?shù)從高到低排序
方法(1)、使用reverse參數(shù)
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: student[2], reverse=True))
[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]
方法(2)、使用負(fù)號(hào)(-)
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: -student[2]))
[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]
注意:負(fù)號(hào)(-)只能用于數(shù)字前面,不能用于字符串前面
場(chǎng)景3、按檔次從高到低進(jìn)行排序,檔次相同的按分?jǐn)?shù)從高到底排序
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: [student[1], -student[2]]))
[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]
場(chǎng)景4、按檔次從低到高進(jìn)行排序,檔次相同的按分?jǐn)?shù)從低到高排序
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: [student[1], -student[2]],reverse=True))
[('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('john', 'A', 96), ('cany', 'A', 96)]
場(chǎng)景5、按檔次從低到高進(jìn)行排序,檔次相同的按分?jǐn)?shù)從低到高排序,最后再按照姓名升序
姓名是字符串,不能在字符串前面用“符號(hào)(-)”來(lái)排序,可以重寫(xiě)“富比較”方法
#學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流群:531509025
class Reversinator(object):
def __init__(self, obj):
self.obj = obj
def __lt__(self, other):
return other.obj < self.obj
student_tuples = [
('john', 'A', 96),
('leky', 'D', 63),
('andy', 'A', 92),
('jane', 'B', 82),
('dave', 'B', 85),
('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: [student[1], -student[2], Reversinator(student[0])], reverse=True))
[('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('cany', 'A', 96), ('john', 'A', 96)]到此這篇關(guān)于Python序列排序的具體場(chǎng)景實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python序列排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析
這篇文章主要為大家介紹了Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
嘗試用最短的Python代碼來(lái)實(shí)現(xiàn)服務(wù)器和代理服務(wù)器
"人生苦短、我用Python",Python最大的特點(diǎn)便是代碼簡(jiǎn)潔,得益于Python自帶的wsgiref包和socket模塊,這里我們將嘗試用最短的Python代碼來(lái)實(shí)現(xiàn)服務(wù)器和代理服務(wù)器:2016-06-06

