欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中sort和sorted排序的實(shí)例方法

 更新時間:2019年08月26日 16:02:17   作者:shengguorui  
在本篇文章中小編給大家?guī)淼氖顷P(guān)于python中sort和sorted排序的實(shí)例方法以及相關(guān)知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。

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

1)排序基礎(chǔ)

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

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

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

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

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

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

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

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

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

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

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

>>> student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2])  # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

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

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

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

>>> 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模塊還允許多級的排序,例如,先以grade,然后再以age來排序:

>>> 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()都接受一個參數(shù)reverse(True or False)來表示升序或降序排序。例如對上面的student降序排序如下:

>>> sorted(student_tuples, key=itemgetter(2), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(student_objects, key=attrgetter('age'), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

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

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

>>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
>>> sorted(data, key=itemgetter(0))
[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

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

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

>>> s = sorted(student_objects, key=attrgetter('age'))   # sort on secondary key
>>> sorted(s, key=attrgetter('grade'), reverse=True)    # now sort on primary key, descending
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

以上就是本次介紹的全部實(shí)例知識點(diǎn)內(nèi)容,感謝大家對腳本之家的支持。

相關(guān)文章

  • Python利用psutil庫進(jìn)行監(jiān)控進(jìn)程和資源

    Python利用psutil庫進(jìn)行監(jiān)控進(jìn)程和資源

    psutil是Python系統(tǒng)和進(jìn)程工具庫,它提供了一種跨平臺的方式來獲取系統(tǒng)信息、管理系統(tǒng)進(jìn)程、監(jiān)控系統(tǒng)性能、操作系統(tǒng)資源等,下面就跟隨小編一起來學(xué)習(xí)psutil庫的具體應(yīng)用吧
    2024-01-01
  • python里glob模塊知識點(diǎn)總結(jié)

    python里glob模塊知識點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python里glob模塊知識點(diǎn)總結(jié),有需要的朋友們可以參考下。
    2021-01-01
  • python如何將圖片轉(zhuǎn)換為字符圖片

    python如何將圖片轉(zhuǎn)換為字符圖片

    這篇文章主要為大家詳細(xì)介紹了python將圖片轉(zhuǎn)換為字符圖片的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 在centos7中分布式部署pyspider

    在centos7中分布式部署pyspider

    PySpider:一個國人編寫的強(qiáng)大的網(wǎng)絡(luò)爬蟲系統(tǒng)并帶有強(qiáng)大的WebUI。采用Python語言編寫,分布式架構(gòu),支持多種數(shù)據(jù)庫后端,強(qiáng)大的WebUI支持腳本編輯器,任務(wù)監(jiān)視器,項(xiàng)目管理器以及結(jié)果查看器。
    2017-05-05
  • python日志模塊logging案例詳解

    python日志模塊logging案例詳解

    日志模塊主要用于輸出運(yùn)行日志,可以設(shè)置輸出日志的等級、日志保存路徑、日志文件回滾等,這篇文章主要介紹了python日志模塊logging,需要的朋友可以參考下
    2024-01-01
  • python服務(wù)器與android客戶端socket通信實(shí)例

    python服務(wù)器與android客戶端socket通信實(shí)例

    這篇文章主要介紹了python服務(wù)器與android客戶端socket通信的實(shí)現(xiàn)方法,實(shí)例形式詳細(xì)講述了Python的服務(wù)器端實(shí)現(xiàn)原理與方法,以及對應(yīng)的Android客戶端實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-11-11
  • python腳本設(shè)置超時機(jī)制系統(tǒng)時間的方法

    python腳本設(shè)置超時機(jī)制系統(tǒng)時間的方法

    這篇文章主要介紹了python腳本設(shè)置超時機(jī)制系統(tǒng)時間的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • tensorflow 初始化未初始化的變量實(shí)例

    tensorflow 初始化未初始化的變量實(shí)例

    今天小編就為大家分享一篇tensorflow 初始化未初始化的變量實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • pandas?如何將字符串映射為數(shù)字

    pandas?如何將字符串映射為數(shù)字

    這篇文章主要介紹了pandas?如何將字符串映射為數(shù)字,具有很好的參考價值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 修復(fù)python-memcached在python3.8環(huán)境中報(bào)SyntaxWarning的問題(完美解決)

    修復(fù)python-memcached在python3.8環(huán)境中報(bào)SyntaxWarning的問題(完美解決)

    我們一直使用python-memcached庫來操作memcached,最近發(fā)現(xiàn)在python3.8的環(huán)境中,代碼會報(bào)錯,下面通過本文給大家講解修復(fù)python-memcached在python3.8環(huán)境中報(bào)SyntaxWarning的問題及解決方法,需要的朋友可以參考下
    2022-08-08

最新評論