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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中List的sort方法(或者sorted内建函数)的用法

發布時間:2024/9/30 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中List的sort方法(或者sorted内建函数)的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:

http://gaopenghigh.iteye.com/blog/1483864


一直用的方法很土,

class term(object):def __init__(self, sent , score):self.sent = sentself.score = scoredef CMP(t1, t2):if t1.score < t2.score:return -1elif t1.score == t2.score:return 0else:return 1 ls.sort(CMP,reverse = True)

要注意,sort的排序是inplace, sorted是返回一個排序后的list,原list不變

List的元素可以是各種東西,字符串,字典,自己定義的類等。?

sorted函數用法如下:?

Python代碼??
  • sorted(data,?cmp=None,?key=None,?reverse=False)??

  • 其中,data是待排序數據,可以使List或者iterator, cmp和key都是函數,這兩個函數作用與data的元素上產生一個結果,sorted方法根據這個結果來排序。?
    cmp(e1, e2) 是帶兩個參數的比較函數, 返回值: 負數: e1 < e2, 0: e1 == e2, 正數: e1 > e2. 默認為 None, 即用內建的比較函數.?
    key 是帶一個參數的函數, 用來為每個元素提取比較值. 默認為 None, 即直接比較每個元素.?
    通常, key 和 reverse 比 cmp 快很多, 因為對每個元素它們只處理一次; 而 cmp 會處理多次.?

    通過例子來說明sorted的用法:?

    1. 對由tuple組成的List排序?
    Python代碼??
  • >>>?students?=?[('john',?'A',?15),?('jane',?'B',?12),?('dave',?'B',?10),]??


  • 用key函數排序(lambda的用法見 注釋1)?
    Python代碼??
  • >>>?sorted(students,?key=lambda?student?:?student[2])???#?sort?by?age??
  • [('dave',?'B',?10),?('jane',?'B',?12),?('john',?'A',?15)]??


  • 用cmp函數排序?
    Python代碼??
  • >>>?sorted(students,?cmp=lambda?x,y?:?cmp(x[2],?y[2]))?#?sort?by?age??
  • [('dave',?'B',?10),?('jane',?'B',?12),?('john',?'A',?15)]??


  • 用 operator 函數來加快速度, 上面排序等價于:(itemgetter的用法見 注釋2)?
    Python代碼??
  • >>>?from?operator?import?itemgetter,?attrgetter??
  • >>>?sorted(students,?key=itemgetter(2))??


  • 用 operator 函數進行多級排序?
    Python代碼??
  • >>>?sorted(students,?key=itemgetter(1,2))??#?sort?by?grade?then?by?age??
  • [('john',?'A',?15),?('dave',?'B',?10),?('jane',?'B',?12)]??



  • 2. 對由字典排序?
    Python代碼??
  • >>>?d?=?{'data1':3,?'data2':1,?'data3':2,?'data4':4}??
  • >>>?sorted(d.iteritems(),?key=itemgetter(1),?reverse=True)??
  • [('data4',?4),?('data1',?3),?('data3',?2),?('data2',?1)]??


  • 注釋1?
    參考:http://jasonwu.me/2011/10/29/introduce-to-python-lambda.html?

    注釋2?
    參考:http://ar.newsmth.net/thread-90745710c90cf1.html?
    class itemgetter(__builtin__.object)?
    |? itemgetter(item, ...) --> itemgetter object?
    |?
    |? Return a callable object that fetches the given item(s) from its operand.?
    |? After, f=itemgetter(2), the call f(r) returns r[2].?
    |? After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3])?

    相當于?
    Python代碼??
  • def?itemgetter(i,*a):???
  • ????def?func(obj):???
  • ????????r?=?obj[i]???
  • ????????if?a:???
  • ????????????r?=?(r,)?+?tuple(obj[i]?for?i?in?a)???
  • ????????return?r???
  • ????return?func???
  • ??
  • >>>?a?=?[1,2,3]???
  • >>>?b=operator.itemgetter(1)???
  • >>>?b(a)???
  • 2???
  • >>>?b=operator.itemgetter(1,0)???
  • >>>?b(a)???
  • (2,?1)???
  • >>>?b=itemgetter(1)???
  • >>>?b(a)???
  • 2???
  • >>>?b=itemgetter(1,0)???
  • >>>?b(a)???
  • (2,?1)???


  • 總結

    以上是生活随笔為你收集整理的python中List的sort方法(或者sorted内建函数)的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。