pythonsorted排序用法詳解

marsggbo發表於2017-03-26

sorted排序

python
sorted
排序

1. operator函式
在介紹sorted函式之前需要了解一下operator函式。

operator函式是python的內建函式,提供了一系列常用的函式操作
比如,operator.mul(x, y)等於x+y

    python    5行
  1. a = [1,2,3

  2. b = [5,6,7

  3. c = map(operator.mul, a, b) 

  4. # c的值就為[5, 12, 21] 

這裡只介紹它的itemgetter() 方法,更多的介紹可參考官網。
operator — Standard operators as functions

operator模組提供的itemgetter函式用於獲取物件的哪些維的資料,引數為一些序號(即需要獲取的資料在物件中的序號),下面看例子。

    bash    8行
  1. a = [1,2,3]  

  2. >>> b=operator.itemgetter(1) //定義函式b,獲取物件的第1個域的值 

  3. >>> b(a)  

  4. 2  
  5. >>> b=operator.itemgetter(1,0) //定義函式b,獲取物件的第1個域和第0個的值 

  6. >>> b(a)  

  7. (2, 1

2. sorted函式
函式介紹:Built-in Function
官網示例:Sorting HOW TO?
函式原型:sorted(iterable[, cmp[, key[, reverse]]])

Return a new sorted list from the items in iterable.(會返回一個重新排列好的list)
iterable(可迭代):可以是list也可以是dict
cmp:可以自定義比較規則,這裡不詳細敘述
key:用於比較的值
reverse:指定是順序還是逆序

下面以dict排序為例做講解:

    python    8行
  1. c = {`a`: 15, `ab`: 6, `bc`: 16, `da`: 95

  2.  

  3. d = sorted(c.iteritems(),key=operator.itemgetter(0),reverse=True

  4. >>> [(`da`, 95), (`bc`, 16), (`ab`, 6), (`a`, 15)] 
  5.  

  6. e = sorted(c.iteritems(),key=operator.itemgetter(0),reverse=True

  7. >>>[`da`, `bc`, `a`, `ab`

1.注意區分dict加與不加iteritems() 對於結果的影響
2.我們的key選擇的是傳入引數的第0號元素,在這裡即是鍵(keys),所以最終的排序是按照鍵排序,我們也可以以值作為標準進行排序,看下面示例

    python    3行
  1. d = sorted(c.iteritems(),key=operator.itemgetter(1),reverse=True

  2. >>> [(`da`, 95), (`bc`, 16), (`a`, 15), (`ab`, 6)] 

看到這你會不會覺得operator的itemgetter函式可以用lambda函式實現:我們可以將上面的示例改成lambda

    python    3行
  1. d = sorted(c.iteritems(),key=lambda x:x[1],reverse=True

  2. >>> [(`da`, 95), (`bc`, 16), (`a`, 15), (`ab`, 6)] 

你看結果是一樣一樣的。

文章參考:
Python中的sorted函式以及operator.itemgetter函式
python中的operator庫


written by MARSGGBO 
2017-2-14


相關文章