您的位置:首页 > 编程语言 > Python开发

python排序之sort,sorted用法

2015-09-01 00:00 816 查看
摘要: 简单翻译自https://wiki.python.org/moin/HowTo/Sorting。介绍list.sort()方法及sorted()用法。

python内置排序方式有两种,一种是针对列表的.sort()方法,另外一种是sorted()函数,他们方法类似,区别有两点

1、list.sort()方法只适合列表对象,sorted()函数适合任何可迭代对象。

2、list.sort()用于改变当前列表,sorted()返回一个新的序列。

用法示例:

>>>help(sorted)
Help on built-in function sorted in module builtins:
sorted(...)
sorted(iterable, key=None, reverse=False) --> new sorted list
>>>ls = [5,1,9,7]
>>> sorted(ls)
[1, 5, 7, 9]
>>>ls.sort()
>>>ls
[1, 5, 7, 9]
#逆序
>>ls.sort(reverse = True)
>>>ls
[9,7,5,1]

通过key函数指定排序方法:(因为sort()和sorted()功能类似,之后都使用sorted()示例)

#假定有个学生年级、年龄名单
>>>students = {'mhye':(2,18),'Jackey':(3,15),'Lucy':(1,16)}
#如果想要按年级排序
>>>sorted(students.items(),key = lambda x:x[1][0])
[('Lucy', (1, 16)), ('mhye', (2, 18)), ('Jackey', (3, 15))]
>>>sorted(students.items(),key = lambda x:x[1][0])
[('Jackey', (3, 15)), ('Lucy', (1, 16)), ('mhye', (2, 18))]
#这个例子不算太好,不够直观,下面这个略微直观点
>>>students=[('mhye',2,18),('Jackey',3,15),('Lucy',1,16)]
>>>sorted(students,key = lambda x : x[2])
[('Jackey', 3, 15), ('Lucy', 1, 16), ('mhye', 2, 18)]

通过对象的属性进行排序,实例化的类按照属性进行排序

>>>class student():
def __init__(self,name,grade,age):
self.name = name
self.age = age
self.grade = grade
def __repr__(self):
return repr((self.name,self.grade,self.age))
def grade_age(self):
return self.grade/self.age
>>>data =(student('mhye',2,24),student('Jackey',1,17),student('Lucy',3,5))
>>>sorted(data,key =lambda student:student.grade)
[('Jackey', 1, 17), ('mhye', 2, 24), ('Lucy', 3, 5)]

python内置的operater模块中,itemgetter,attrgetter,methodcaller方法可以用来对对象,属性,方法进行调用用于排序

>>>from operator import attrgetter,itemgetter,methodcaller
>>>sorted(data,key = attrgetter('age'))
[('Lucy', 3, 5), ('Jackey', 1, 17), ('mhye', 2, 24)]

In [66]: sorted(data2,key = itemgetter(2))
Out[66]: [('Lucy', 3, 5), ('Jackey', 1, 17), ('mhye', 2, 24)]

#itemgetter只支持可索引对象
>>>data2 = (('mhye', 2, 24), ('Jackey', 1, 17), ('Lucy', 3, 5))
>>>sorted(data2,key = itemgetter(2))#以年龄排序
[('Lucy', 3, 5), ('Jackey', 1, 17), ('mhye', 2, 24)]
<<<sorted(data2,key = itemgetter(0,1))#以姓名、年
3ff0
级排序
[('Jackey', 1, 17), ('Lucy', 3, 5), ('mhye', 2, 24)]

sorted(data,key = methodcaller('grade_age'))
[('Jackey', 1, 17), ('mhye', 2, 24), ('Lucy', 3, 5)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python sort sorted