python中sorted_Python中sorted()方法的用法
Python中sorted()方法的用法
2012-12-24 22:01:14| 分類: Python |字號(hào)
1.先說(shuō)一下iterable,中文意思是迭代器。
Python的幫助文檔中對(duì)iterable的解釋是:iteralbe指的是能夠一次返回它的一個(gè)成員的對(duì)象。iterable主要包括3類:
第一類是所有的序列類型,比如list(列表)、str(字符串)、tuple(元組)。
第二類是一些非序列類型,比如dict(字典)、file(文件)。
第三類是你定義的任何包含__iter__()或__getitem__()方法的類的對(duì)象。
2.Python幫助文檔中對(duì)sorted方法的講解:
sorted(iterable[,cmp,[,key[,reverse=True]]])
作用:Return a new sorted list from the items in iterable.
第一個(gè)參數(shù)是一個(gè)iterable,返回值是一個(gè)對(duì)iterable中元素進(jìn)行排序后的列表(list)。
可選的參數(shù)有三個(gè),cmp、key和reverse。
1)cmp指定一個(gè)定制的比較函數(shù),這個(gè)函數(shù)接收兩個(gè)參數(shù)(iterable的元素),如果第一個(gè)參數(shù)小于第二個(gè)參數(shù),返回一個(gè)負(fù)數(shù);如果第一個(gè)參數(shù)等于第二個(gè)參數(shù),返回零;如果第一個(gè)參數(shù)大于第二個(gè)參數(shù),返回一個(gè)正數(shù)。默認(rèn)值為None。
2)key指定一個(gè)接收一個(gè)參數(shù)的函數(shù),這個(gè)函數(shù)用于從每個(gè)元素中提取一個(gè)用于比較的關(guān)鍵字。默認(rèn)值為None。
3)reverse是一個(gè)布爾值。如果設(shè)置為True,列表元素將被倒序排列。
通常來(lái)說(shuō),key和reverse比一個(gè)等價(jià)的cmp函數(shù)處理速度要快。這是因?yàn)閷?duì)于每個(gè)列表元素,cmp都會(huì)被調(diào)用多次,而key和reverse只被調(diào)用一次。
3.具體的用法如下:
1)排序基礎(chǔ)
一個(gè)簡(jiǎn)單的升序排列很簡(jiǎn)單-只需要調(diào)用sorted()函數(shù)即可。 這個(gè)函數(shù)返回一個(gè)新的排序列表。:
>>> sorted([5,2,3,1,4])
[1,2,3,4,5]
你也可以使用list的list.sort()方法。這個(gè)方法會(huì)修改原始的list(返回值為None)。通常這個(gè)方法不如sorted()方便-如果你不需要原始的list,list.sort()方法效率會(huì)稍微高一些。
>>> a=[5,2,3,1,4]
>>> a.sort()
>>> a
[1,2,3,4,5]
另一個(gè)區(qū)別在于list.sort()方法只為list定義。而sorted()函數(shù)可以接收任何的iterable。>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) [1, 2, 3, 4, 5]2)Key Functions(關(guān)鍵字函數(shù))從Python2.4開(kāi)始,list.sort()和sorted()方法都添加了一個(gè)key參數(shù)來(lái)說(shuō)明一個(gè)函數(shù),這個(gè)函數(shù)在做比較之前會(huì)對(duì)list中的每個(gè)元素進(jìn)行調(diào)用。例如,這里是一個(gè)大小寫不敏感的字符串比較:>>> sorted("This is a test string from Andrew".split(), key=str.lower) ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']key的值應(yīng)該是一個(gè)函數(shù),這個(gè)函數(shù)接收一個(gè)參數(shù)并且返回一個(gè)用于比較的關(guān)鍵字。這種技術(shù)比較快,原因在于對(duì)每個(gè)輸入記錄,這個(gè)函數(shù)只會(huì)被調(diào)用一次。對(duì)復(fù)雜對(duì)象的比較通常是使用對(duì)象的切片作為關(guān)鍵字。例如:>>> 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ù)適用于有named屬性的對(duì)象。例如:>>> 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模塊中的函數(shù))上面的key-function模式很常見(jiàn),因此Python提供了方便的函數(shù)使得祖先函數(shù)更簡(jiǎn)單和快捷。operator module有itemgetter,attrgetter,以及從Python2.6開(kāi)始的methodcaller函數(shù)。使用這些函數(shù),上面的例子會(huì)變得更簡(jiǎn)單和快捷:>>> 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模塊支持多級(jí)排序。例如先按成績(jī)排序,再按年齡排序:>>> 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()都接收一個(gè)reverse參數(shù)。它是用于降序排序的標(biāo)志。例如,為了獲得學(xué)生年齡的降序排序:>>> 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開(kāi)始,排序都保證是穩(wěn)定的。意思是當(dāng)多個(gè)記錄有相同的關(guān)鍵字時(shí),它們?cè)嫉呐判虮A簟?gt;>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
>>> sorted(data, key=itemgetter(0)) [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]注意到兩個(gè)'blue'的記錄保留了它們?cè)嫉捻樞?#xff0c;因此('blue',1)保證在('blue',2)之前。 這個(gè)好的特性能讓你建立復(fù)雜的排序。例如,將學(xué)生記錄按成績(jī)降序排序、按年兩升序排列。先按年齡排序,再按成績(jī)排序。
>>> s=sorted(student_object,key=attrgettter('age')) # sort on secondary key
>>> sorted(s,key=attrgetter('grade'),reverse=True) [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
總結(jié)
以上是生活随笔為你收集整理的python中sorted_Python中sorted()方法的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python课程设计小程序_python
- 下一篇: 菜单权限管理怎么实现_Java第58讲—