日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python sort 多级排序_sort、sorted排序技巧(多级排序)

發(fā)布時(shí)間:2025/3/20 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python sort 多级排序_sort、sorted排序技巧(多级排序) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python list內(nèi)置sort()方法用來(lái)排序,也可以用python內(nèi)置的全局sorted()方法來(lái)對(duì)可迭代的序列排序生成新的序列。

示例:

from operator import itemgetter, attrgetter

student_tuples = [

('John', 'A', 1),

('Dave', 'C', 2),

('Leon', 'B', 3),

]

print sorted(student_tuples, key=lambda x: x[0])

print sorted(student_tuples, key=itemgetter(0))

print sorted(student_tuples, key=lambda x: (x[0], x[1]))

print sorted(student_tuples, key=itemgetter(0, 1))

student_tuples = [

{'name': 'John', 'grade': 'A', 'no': 1},

{'name': 'Dave', 'grade': 'C', 'no': 2},

{'name': 'Leon', 'grade': 'B', 'no': 3},

]

print sorted(student_tuples, key=lambda x: x['name'])

print sorted(student_tuples, key=lambda x: (x['name'], x['grade']))

class Student(object):

def __init__(self, name, grade, no):

self.name = name

self.grade = grade

self.no = no

def __repr__(self):

return repr((self.name, self.grade, self.no))

students = [

Student('John', 'A', 1),

Student('Dave', 'C', 2),

Student('Leon', 'B', 3),

]

print sorted(students, key=lambda x: (x.name, x.grade))

print sorted(students, key=attrgetter('name', 'grade'))

image.png

1)排序基礎(chǔ)

簡(jiǎn)單的升序排序是非常容易的。只需要調(diào)用sorted()方法。它返回一個(gè)新的list,新的list的元素基于小于運(yùn)算符(lt)來(lái)排序。

1. >>> sorted([5, 2, 3, 1, 4])

2. [1, 2, 3, 4, 5]

你也可以使用list.sort()方法來(lái)排序,此時(shí)list本身將被修改。通常此方法不如sorted()方便,但是如果你不需要保留原來(lái)的list,此方法將更有效。

1. >>> a = [5, 2, 3, 1, 4]

2. >>> a.sort()

3. >>> a

4. [1, 2, 3, 4, 5]

另一個(gè)不同就是list.sort()方法僅被定義在list中,相反地sorted()方法對(duì)所有的可迭代序列都有效。

1. >>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})

2. [1, 2, 3, 4, 5]

2)key參數(shù)/函數(shù)

從python2.4開(kāi)始,list.sort()和sorted()函數(shù)增加了key參數(shù)來(lái)指定一個(gè)函數(shù),此函數(shù)將在每個(gè)元素比較前被調(diào)用。 例如通過(guò)key指定的函數(shù)來(lái)忽略字符串的大小寫(xiě):

1. >>> sorted("This is a test string from Andrew".split(), key=str.lower)

2. ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

key參數(shù)的值為一個(gè)函數(shù),此函數(shù)只有一個(gè)參數(shù)且返回一個(gè)值用來(lái)進(jìn)行比較。這個(gè)技術(shù)是快速的因?yàn)閗ey指定的函數(shù)將準(zhǔn)確地對(duì)每個(gè)元素調(diào)用。

更廣泛的使用情況是用復(fù)雜對(duì)象的某些值來(lái)對(duì)復(fù)雜對(duì)象的序列排序,例如:

1. >>> student_tuples = [

2. ('john', 'A', 15),

3. ('jane', 'B', 12),

4. ('dave', 'B', 10),

5. ]

6. >>> sorted(student_tuples, key=lambda student: student[2]) # sort by age

7. [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

同樣的技術(shù)對(duì)擁有命名屬性的復(fù)雜對(duì)象也適用,例如:

>>> class Student:

def __init__(self, name, grade, age):

self.name = name

self.grade = grade

self.age = age

def __repr__(self):

return repr((self.name, self.grade, self.age))

>>> student_objects = [

Student('john', 'A', 15),

Student('jane', 'B', 12),

Student('dave', 'B', 10),

]

>>> sorted(student_objects, key=lambda student: student.age) # sort by age

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

3)Operator 模塊函數(shù)(多級(jí)排序)

上面的key參數(shù)的使用非常廣泛,因此python提供了一些方便的函數(shù)來(lái)使得訪問(wèn)方法更加容易和快速。operator模塊有itemgetter,attrgetter,從2.6開(kāi)始還增加了methodcaller方法。使用這些方法,上面的操作將變得更加簡(jiǎn)潔和快速:

>>> from operator import itemgetter, attrgetter

>>> sorted(student_tuples, key=itemgetter(2))

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

>>> sorted(student_objects, key=attrgetter('age'))

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

operator模塊還允許多級(jí)的排序,例如,先以grade,然后再以age來(lái)排序:

>>> sorted(student_tuples, key=itemgetter(1,2))

[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

>>> sorted(student_objects, key=attrgetter('grade', 'age'))

[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

4)升序和降序

list.sort()和sorted()都接受一個(gè)參數(shù)reverse(True or False)來(lái)表示降序或升序排序。

例如對(duì)上面的student降序排序如下:

1. >>> sorted(student_tuples, key=itemgetter(2), reverse=True)

2. [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

3. >>> sorted(student_objects, key=attrgetter('age'), reverse=True)

4. [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

5)排序的穩(wěn)定性和復(fù)雜排序

從python2.2開(kāi)始,排序被保證為穩(wěn)定的。意思是說(shuō)多個(gè)元素如果有相同的key,則排序前后他們的先后順序不變。

1. >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]

2. >>> sorted(data, key=itemgetter(0))

3. [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

注意在排序后'blue'的順序被保持了,即'blue', 1在'blue', 2的前面。

更復(fù)雜地你可以構(gòu)建多個(gè)步驟來(lái)進(jìn)行更復(fù)雜的排序,例如對(duì)student數(shù)據(jù)先以grade降序排列,然后再以age升序排列。

1. >>> s = sorted(student_objects, key=attrgetter('age')) # sort on secondary key

2. >>> sorted(s, key=attrgetter('grade'), reverse=True) # now sort on primary key, descending

3. [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

總結(jié)

以上是生活随笔為你收集整理的python sort 多级排序_sort、sorted排序技巧(多级排序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品一区二区av白丝下载 | av拍拍拍| 青青草一区 | 牛牛影视一区二区 | 亚洲免费福利 | 96国产在线| 欧美私人影院 | 先锋资源av在线 | 公肉吊粗大爽色翁浪妇视频 | 40一50一60老女人毛片 | 国产剧情自拍 | 国产精品传媒麻豆hd | 黄色免费成人 | 久久天 | 男同精品| h亚洲| 一级黄网站 | 好吊色在线观看 | 懂色av中文字幕 | 丰满人妻一区二区三区53 | 日本不卡二区 | 麻豆国产一区二区 | 精品视频一区二区在线观看 | 久99热 | 国语av | 青青草91久久久久久久久 | 91夜色视频 | 黄色特级毛片 | 亚洲.www | 瑟瑟视频免费观看 | 亚洲男人天堂2017 | 免费午夜av | 国产九九九精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 国模吧一区二区三区 | 北条麻妃二三区 | 清纯粉嫩极品夜夜嗨av | 国产ts人妖系列高潮 | 黄色观看网站 | 日本一区二区欧美 | 成人黄色片网站 | 黄金网站在线观看 | 欧美国产二区 | 日本女优一区 | 特黄一级视频 | 正在播放久久 | 桃色视频网 | 麻豆观看 | 撒尿free性hd | 国产乱强伦一区二区三区 | 国产婷婷一区二区三区 | 国产精品自产拍高潮在线观看 | va在线播放 | 天天操网站 | 猛男被粗大男男1069 | 黑人操少妇 | 免费精品视频 | 久久久久国产精品 | 深夜视频一区二区 | 黄片毛片在线免费观看 | 亚洲天堂视频一区 | 精品人妻无码一区二区性色 | 亚洲一二三不卡 | 亚洲大成色 | 日本最新中文字幕 | 四虎影视永久地址 | 国产精品久久久爽爽爽麻豆色哟哟 | 色姑娘av| 人操人| 久久久久久久久久久久久久久久久 | www日韩| 日本免费成人 | 亚洲精品伊人 | 性高潮久久久久久久久久 | 精品人妻一区二区三区久久夜夜嗨 | 国产一级二级三级精品 | 撕开少妇裙子猛然进入 | 老妇free性videosxx | 无码人妻一区二区三区在线 | h亚洲 | 黄色资源网 | www.色综合.com | 91免费官网 | 动漫玉足吸乳羞免费网站玉足 | 日本欧美亚洲 | 成人一级视频 | 干爹你真棒插曲mv在线观看 | 九热在线 | 亚洲国产精品久久久久久 | 国产在线视频网址 | 国产成人精品视频在线 | 日韩国产中文字幕 | 热99 | 奇米第四色7777 | 久久影院午夜理论片无码 | 欧美一级片在线看 | 一级黄色在线观看 | 欧美激情性做爰免费视频 | 狠狠爱免费视频 |