Python3中排序函數(shù)sort()和sorted()

一、函數(shù)sort()


  1. sort() :僅對(duì)list對(duì)象進(jìn)行排序,會(huì)改變list自身的順序,沒有返回值繁仁,即原地排序

  2. list.sort(key=None, reverse=False)

  • key :設(shè)置排序方法辕狰,或指定list中用于排序的元素改备;
  • reverse :升降序排列,默認(rèn)為升序排列蔓倍;
  1. 一維元素組成的list排序:忽略參數(shù)key
>>> a = ['TaoBao', 'Google', 'BaiDu']
>>> a.sort()
>>> a
['BaiDu', 'Google', 'TaoBao']
  1. dict組成的list排序
  • 參數(shù)key獲取dict的key或value值進(jìn)行排序
>>> a = [{'dell': 200}, {'mac': 100}]

# 字典的value排序
>>> a.sort(key=lambda x: list(x.values()))
>>> a
[{'mac': 100}, {'dell': 200}]

# 字典的key排序
>>> a.sort(key=lambda x: list(x.keys()))
>>> a
[{'dell': 200}, {'mac': 100}]
  • dict的長(zhǎng)度排序
>>> a = [{'mac': 200, 'huawei': 300, 'xiaomi': 150}, {'vivo': 210, 'Galaxy': 100}, {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}]
>>> a.sort(key=lambda x: len(x))
>>> a
[{'vivo': 210, 'Galaxy': 100}, {'mac': 200, 'huawei': 300, 'xiaomi': 150}, {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}]
  1. 多維元素 組成的list排序
  • tuple的第2個(gè)元素排序
>>> a = [('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c')]
>>> a
[('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c')]
>>> a.sort(key=lambda x: x[1])    # lambda 函數(shù):指定用于排序的元素
>>> a
[('mac', 1, 'c'), ('linux', 2, 'a'), ('mac', 3, 'b')]
  • tupel的第1個(gè)和3個(gè)元素進(jìn)行排序
>>> a.sort(key=lambda x: (x[0], x[2]))
>>> a
[('linux', 2, 'a'), ('mac', 3, 'b'), ('mac', 1, 'c')]


二悬钳、sorted()


  1. sorted() :對(duì)所有可迭代對(duì)象進(jìn)行排序,返回排序后的新對(duì)象偶翅,原對(duì)象保持不變默勾;

  2. sorted(iterable [, key[, reverse]])

  • key :設(shè)置排序方法,或指定迭代對(duì)象中聚谁,用于排序的元素母剥;
  • reverse :升降序排列,默認(rèn)為升序排列形导;
  1. 一維元素組成的迭代對(duì)象排序
  • dictkey/value排序:返回key/value排序后組成的list
# key排序
>>> a = {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}
>>> sorted(a)
['Smartisan', 'lenovo', 'meizu', 'oppo']

# value排序
>>> a = {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}
>>> sorted(a.values())
[50, 80, 120, 200]
  • dictkey/value排序:返回排序后(key, value)組成的list
# 按字典的value排序
>>> a = {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}
>>> sorted(a.items(), key=lambda x: x[1])
[('lenovo', 50), ('meizu', 80), ('Smartisan', 120), ('oppo', 200)]
  • string排序:返回字符組成的list
>>> a = 'python'
>>> sorted(a)
['h', 'n', 'o', 'p', 't', 'y']
  • string分割排序
>>> a = "This is a test string from Andrew"
>>> sorted(a.split(), key=str.lower)    # split()函數(shù)進(jìn)行字符串分割环疼,key指定排序的方法
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
  1. 多維元素的排序
  • dict組成的tuplelist排序:方法類似sort()
>>> a = ({'dell': 200}, {'mac': 100})
>>> sorted(a, key=lambda x: list(x.values()))
[{'mac': 100}, {'dell': 200}]
  • tuple組成的tuplelist排序:方法類似sort()
>>> a = (('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c'))
>>> sorted(a, key=lambda x: (x[1], x[2]))    # 對(duì)tuple的第2、3個(gè)元素排序
[('mac', 1, 'c'), ('linux', 2, 'a'), ('mac', 3, 'b')]
  • list組成的tuplelist排序:方法類似sort()
>>> a = [[1, 5, 9], [8, 4, 3], [4, 6, 2]]
>>> sorted(a, key=lambda x: x[0], reverse=True)    # 按第1個(gè)元素降序排列
[[8, 4, 3], [4, 6, 2], [1, 5, 9]]


三朵耕、sort()與sorted()的區(qū)別和聯(lián)系


  1. sort():僅作用于list對(duì)象炫隶,沒有返回值,修改對(duì)象本身阎曹;

  2. sorted():作用于所有可迭代對(duì)象伪阶,返回新的排序?qū)ο螅恍薷脑瓕?duì)象处嫌;

  3. sort()函數(shù)不需要復(fù)制原有列表栅贴,消耗的內(nèi)存較少,效率也較高熏迹;

  4. sorted()函數(shù)功能強(qiáng)大檐薯,使用的范圍更為廣泛。

四注暗、Operator模塊函數(shù)

  1. Python提供了一些方便的函數(shù)厨剪,使得訪問方法更加容易和快速;

  2. Operator模塊是用C語言實(shí)現(xiàn)的友存,所以執(zhí)行速度比python代碼快;

  3. Operator模塊有itemgetter陶衅、attrgetter屡立、methodcaller等常用函數(shù);

  4. 可以使用函數(shù)itemgetter()替代排序函數(shù)(sort、sorted)中key參數(shù)的lambda函數(shù)膨俐,更快速方便地獲取元素勇皇;

  5. itemgetter():返回一個(gè)函數(shù),通過該函數(shù)作用到目標(biāo)對(duì)象上焚刺,獲取目標(biāo)對(duì)象對(duì)應(yīng)位置上(index)的元素敛摘,即實(shí)現(xiàn)取元素的功能。

>>> a = [1, 2, 100]
>>> from operator import itemgetter

# 獲取位置為2的元素
>>> f = itemgetter(2)
>>> f
operator.itemgetter(2)
>>> f(a)
100

# 獲取位置為1和2的元素
>>> f = itemgetter(1, 2)
>>> f
operator.itemgetter(1, 2)
>>> f(a)
(2, 100)
  1. 抽象理解
    t為目標(biāo)對(duì)象乳愉,f = itemgetter(n)
    調(diào)用 f(t) 時(shí)兄淫,返回t[n],即目標(biāo)對(duì)象t中位置為n的元素

  2. 使用sort()sorted()排序時(shí)蔓姚,可以使用itemgetter()替代key參數(shù)中的lambda函數(shù)捕虽。

from operator import itemgetter

>>> a = [('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c')]

>>> a.sort(key=itemgetter(1))
>>> a
[('mac', 1, 'c'), ('linux', 2, 'a'), ('mac', 3, 'b')]

>>> sorted(a, key=itemgetter(2))
[('linux', 2, 'a'), ('mac', 3, 'b'), ('mac', 1, 'c')]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坡脐,隨后出現(xiàn)的幾起案子泄私,更是在濱河造成了極大的恐慌,老刑警劉巖备闲,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晌端,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恬砂,警方通過查閱死者的電腦和手機(jī)咧纠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來觉既,“玉大人惧盹,你說我怎么就攤上這事〉伤希” “怎么了钧椰?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)符欠。 經(jīng)常有香客問我嫡霞,道長(zhǎng),這世上最難降的妖魔是什么希柿? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任诊沪,我火速辦了婚禮,結(jié)果婚禮上曾撤,老公的妹妹穿的比我還像新娘端姚。我一直安慰自己,他們只是感情好挤悉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布渐裸。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昏鹃。 梳的紋絲不亂的頭發(fā)上尚氛,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音洞渤,去河邊找鬼阅嘶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛载迄,可吹牛的內(nèi)容都是我干的讯柔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼磷杏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了捏卓?” 一聲冷哼從身側(cè)響起极祸,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤遥金,失蹤者是張志新(化名)和其女友劉穎蒜田,沒想到半個(gè)月后冲粤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厢呵,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡短曾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嫉拐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漠嵌。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挺身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情热芹,我是刑警寧澤伊脓,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布报腔,位于F島的核電站纯蛾,受9級(jí)特大地震影響翻诉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拄查,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一碍脏、第九天 我趴在偏房一處隱蔽的房頂上張望典尾。 院中可真熱鬧,春花似錦姜性、人聲如沸髓考。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工译暂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伯顶。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓谭网,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殖妇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • abs() 函數(shù) 描述 abs() 函數(shù)返回?cái)?shù)字的絕對(duì)值。 語法 以下是 abs() 方法的語法: abs( x ...
    時(shí)光是座城閱讀 488評(píng)論 0 2
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 2,743評(píng)論 0 8
  • # 第一優(yōu)先級(jí)規(guī)則聲明: # 除了夢(mèng)境,每一個(gè)意識(shí)主進(jìn)程都必須與一個(gè)身體參與的機(jī)械進(jìn)程相匹配粪小,否則結(jié)束意識(shí)主進(jìn)程待榔。...
    李洞BarryLi閱讀 3,845評(píng)論 0 1
  • 昨晚下班回到家已經(jīng)6點(diǎn)半了并扇,老公加班去了俩莽,女兒自己在家寫作業(yè),想到晚上只有我們兩個(gè)吃飯,干脆帶女兒出去吃,好久...
    馬瑞霞_Mary閱讀 476評(píng)論 0 0
  • 今天是雙十一改抡,網(wǎng)上可熱鬧了夷陋。女兒今天上午復(fù)習(xí)了一會(huì)兒枷邪,給女兒在網(wǎng)上看看衣服。自從有了二寶沒有時(shí)間帶女兒去市里...
    專業(yè)改衣店閱讀 117評(píng)論 0 0