关闭

python sort sorted 排序详解

标签: pythonsortsorted排序
1989人阅读 评论(0) 收藏 举报
分类:

python中,list类型内置了sort()方法用于排序。当然,python还有内置的全局sorted()方法,用于可迭代序列的排序。这两个方法大部分的用法是相同的,最大的不同在于,sort()方法不会生成一个新的list,而是在原有的list上进行修改;sorted()方法则是生成一个新的可迭代序列。

1.最简单的排序

首先help一把list.sort()方法

In [1]: help(list.sort)

Help on method_descriptor:

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1
(END)

注:在python 3.x系列中,cmp参数已经被废弃,由key参数指定即可。

list.sort()方法就可以对list进行排序。不过需要注意的是,此时原来的list将被修改。

In [2]: array=[5,3,1,7,9]

In [3]: array.sort()

In [4]: array
Out[4]: [1, 3, 5, 7, 9]

2.复杂对象排序

使用的更广泛的情况是用复杂对象的某些值来实现复杂对象的排序。
例如:

In [5]: persons=[['lindan','A',20],['chenlong','A',18],['tiantian','B',18]]

In [6]: list.sort(persons,key=lambda person:person[2])

In [7]: persons
Out[7]: [['chenlong', 'A', 18], ['tiantian', 'B', 18], ['lindan', 'A', 20]]

使用operator模块

In [8]: persons=[['lindan','A',20],['chenlong','A',18],['tiantian','B',18]]

In [9]: from operator import itemgetter,attrgetter

In [10]: list.sort(persons,key=itemgetter(2))

In [11]: persons
Out[11]: [['chenlong', 'A', 18], ['tiantian', 'B', 18], ['lindan', 'A', 20]]

3.对拥有命名属性的复杂对象排序

也可以对某个拥有命名属性的复杂对象进行排序(为了方便,使用sorted()方法,与list.sort()方法本质是一样的)

class Person:
    def __init__(self,name,hierarchy,age):
        self.name = name
        self.hierarchy = hierarchy
        self.age = age

    def __repr__(self):
        return repr((self.name,self.hierarchy,self.age))

#按年龄排序  
def sort_age():
    Persons = [Person('kobe','A',20),Person('janes','A',18),Person('Tracy','B',18)]
    p_age = sorted(Persons,key = attrgetter('age'),reverse = True)
    print p_age

#先按年龄,再按名字排序  
def sort_age_hierarchy():
    Persons = [Person('kobe','A',20),Person('janes','A',18),Person('Tracy','B',18)]
    p_sorted = sorted(Persons,key = attrgetter('age','name'),reverse = True)
    print p_sorted

if __name__ == '__main__':
    sort_age()
    sort_age_hierarchy()

结果如下:

[('kobe', 'A', 20), ('janes', 'A', 18), ('Tracy', 'B', 18)]
[('kobe', 'A', 20), ('janes', 'A', 18), ('Tracy', 'B', 18)]
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

python sort、sorted高级排序技巧

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。 1)排序基础 简单的升序排序是非常容易的。只需...
  • jb19900111
  • jb19900111
  • 2016-02-10 16:36
  • 4782

python排序函数sort()与sorted()区别

sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key...
  • zyl1042635242
  • zyl1042635242
  • 2015-01-25 16:58
  • 6964

Python的排序:关于sort()与sorted()

list.sort()list的一个方法,具有三个参数:cmp,key,reverse(Python3只有后两个) 一个list调用sort方法后,对该list进行排序,不保存原list - 参数...
  • qq_15714857
  • qq_15714857
  • 2016-01-19 22:14
  • 2790

Python 列表排序方法reverse、sort、sorted详解

python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 reve...
  • qiuzhijieluojianping
  • qiuzhijieluojianping
  • 2016-02-03 14:50
  • 336

Python 列表排序方法reverse、sort、sorted详解

python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 revers...
  • gettogetto
  • gettogetto
  • 2017-06-09 12:07
  • 171

Python 列表排序方法reverse、sort、sorted详解

python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 reverse(...
  • liwei825755184
  • liwei825755184
  • 2016-11-30 08:52
  • 2504

Python 列表排序方法reverse、sort、sorted详解

python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还... http://www.pythont...
  • ChengFuture
  • ChengFuture
  • 2016-02-17 14:48
  • 376

转载:python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例 http://wangwei007.blog.51cto.com/68019/1100742

python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例 python 列表list中内置了一个十分有用的排序函数sort,sorted,它可以用于列表的排序,以下是例...
  • yichipingsuide
  • yichipingsuide
  • 2015-01-10 11:33
  • 611

python sort、sorted常用的排序技巧

array.sort(key=lambda x: x[2]) 根据array中每个元组的第二个元素排序 Python list内置sort()方法用来排序,也可以用pyth...
  • a3335581
  • a3335581
  • 2017-03-28 16:29
  • 196

python列表排序方法sort、sorted技巧篇

转自:http://www.cnblogs.com/whaben/p/6495702.html python 列表排序方法sort、sorted技巧篇 Python lis...
  • YANG_Gang2017
  • YANG_Gang2017
  • 2017-10-26 21:41
  • 170
    个人资料
    • 访问:1347304次
    • 积分:12849
    • 等级:
    • 排名:第1243名
    • 原创:306篇
    • 转载:98篇
    • 译文:1篇
    • 评论:148条
    最新评论