Python中sorted()方法的用法

來源:互聯網
上載者:User

標籤:並且   caller   處理   lis   包括   important   data-   name   ever   

 Python中sorted()方法的用法  

Python 字型大小<span pnt="" fc03"="" id="$_blog_subscribe" style="margin: 0px; padding: 0px;"> 訂閱

 1.先說一下iterable,中文意思是迭代器。Python的協助文檔中對iterable的解釋是:iteralbe指的是能夠一次返回它的一個成員的對象。iterable主要包括3類:第一類是所有的序列類型,比如list(列表)、str(字串)、tuple(元組)。第二類是一些非序列類型,比如dict(字典)、file(檔案)。第三類是你定義的任何包含__iter__()或__getitem__()方法的類的對象。
2.Python協助文檔中對sorted方法的講解:sorted(iterable[,cmp,[,key[,reverse=True]]])作用:Return a new sorted list from the items in iterable.          第一個參數是一個iterable,傳回值是一個對iterable中元素進行排序後的列表(list)。 可選的參數有三個,cmp、key和reverse。1)cmp指定一個定製的比較函數,這個函數接收兩個參數(iterable的元素),如果第一個參數小於第二個參數,返回一個負數;如果第一個參數等於第二個參數,返回零;如果第一個參數大於第二個參數,返回一個正數。預設值為None。2)key指定一個接收一個參數的函數,這個函數用於從每個元素中提取一個用於比較的關鍵字。預設值為None。3)reverse是一個布爾值。如果設定為True,列表元素將被倒序排列。 通常來說,key和reverse比一個等價的cmp函數處理速度要快。這是因為對於每個列表元素,cmp都會被調用多次,而key和reverse只被調用一次。  3.具體的用法如下:1)排序基礎一個簡單的升序排列很簡單-只需要調用sorted()函數即可。 這個函數返回一個新的排序列表。:>>> sorted([5,2,3,1,4])[1,2,3,4,5] 你也可以使用list的list.sort()方法。這個方法會修改原始的list(傳回值為None)。通常這個方法不如sorted()方便-如果你不需要原始的list,list.sort()方法效率會稍微高一些。 >>> a=[5,2,3,1,4]>>> a.sort()>>> a[1,2,3,4,5] 另一個區別在於list.sort()方法只為list定義。而sorted()函數可以接收任何的iterable。
>>> sorted({1: ‘D‘, 2: ‘B‘, 3: ‘B‘, 4: ‘E‘, 5: ‘A‘}) [1, 2, 3, 4, 5]
2)Key Functions(關鍵字函數)
從Python2.4開始,list.sort()和sorted()方法都添加了一個key參數來說明一個函數,這個函數在做比較之前會對list中的每個元素進行調用。
例如,這裡是一個大小寫不敏感的字串比較:
>>> sorted("This is a test string from Andrew".split(), key=str.lower) [‘a‘, ‘Andrew‘, ‘from‘, ‘is‘, ‘string‘, ‘test‘, ‘This‘]
key的值應該是一個函數,這個函數接收一個參數並且返回一個用於比較的關鍵字。這種技術比較快,原因在於對每個輸入記錄,這個函數只會被調用一次。
對複雜物件的比較通常是使用對象的切片作為關鍵字。例如:
>>> 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)]
同樣的技術適用於有named屬性的對象。例如:
>>> 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 Module Functions (Operator模組中的函數)
上面的key-function模式很常見,因此Python提供了方便的函數使得祖先函數更簡單和快捷。operator module有itemgetter,attrgetter,以及從Python2.6開始的methodcaller函數。
使用這些函數,上面的例子會變得更簡單和快捷:
 

Python中sorted()方法的用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.