python sort sorted_Python sort和sorted

Python中用来排序的方法sort、sorted

sort 与 sorted 区别:

1.sort 是应用在 list 上的方法,而sorted 可以对所有可迭代的对象(他们可以是list、dict、set、甚至是字符串)进行排序操作。

2.list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

3.sorted方法为内置方法,sort方法为属性方法。

4.sort是在原位重新排列列表,而sorted()是产生一个新的列表。

5.推荐使用内置方法,效率更高,所以使用sorted更好。

sort方法原型:

>>> help(list.sort)

L.sort(cmp=None, key=None, reverse=False)

sorted方法原型:

>>> help(sorted)

sorted(iterable,key=None, reverse=False)

参数说明:

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

sorted使用方法

1、对列表排序,返回的对象不会改变原列表,返回新列表

list = [1,5,7,2,4]

sorted(list)

Out[87]: [1, 2, 4, 5, 7]#可以设定时候排序方式,默认从小到大,设定reverse = False 可以从大到小

sorted(list,reverse=False)

Out[88]: [1, 2, 4, 5, 7]

sorted(list,reverse=True)

Out[89]: [7, 5, 4, 2, 1]

2、根据自定义规则来排序,使用参数:key

#使用key,默认搭配lambda函数使用

sorted(chars,key=lambdax:len(x))

Out[92]: ['a', 'is', 'boy', 'bruce', 'handsome']

sorted(chars,key=lambda x:len(x),reverse=True)

Out[93]: ['handsome', 'bruce', 'boy', 'is', 'a']

3、根据自定义规则来排序,对元组构成的列表进行排序

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]#key=lambda x: x[1]中可以任意选定x中可选的位置进行排序

sorted(tuple_list, key=lambda x: x[1])

Out[94]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

sorted(tuple_list, key=lambdax: x[0])

Out[95]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]

sorted(tuple_list, key=lambda x: x[2])

Out[96]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

4、排序的元素是自定义类

classtuple_list:def __init__(self, one, two, three):

self.one=one

self.two=two

self.three=threedef __repr__(self):returnrepr((self.one, self.two, self.three))

tuple_list_= [tuple_list('A', 1,5), tuple_list('B', 3,2), tuple_list('C', 2,6)]

sorted(tuple_list_, key=lambdax: x.one)

Out[104]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]

sorted(tuple_list_, key=lambdax: x.two)

Out[105]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

sorted(tuple_list_, key=lambdax: x.three)

Out[106]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

5、sorted 也可以根据多个字段来排序

classtuple_list:def __init__(self, one, two, three):

self.one=one

self.two=two

self.three=threedef __repr__(self):returnrepr((self.one, self.two, self.three))

tuple_list_= [tuple_list('C', 1,5), tuple_list('A', 3,2), tuple_list('C', 2,6)]#首先根据one的位置来排序,然后根据two的位置来排序

sorted(tuple_list_, key=lambdax:(x.one, x.two))

Out[112]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]

6、使用operator 中的itemgetter方法和attrgetter方法

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]classtuple_list_class:def __init__(self, one, two, three):

self.one=one

self.two=two

self.three=threedef __repr__(self):returnrepr((self.one, self.two, self.three))

tuple_list_= [tuple_list_class('C', 1,5), tuple_list_class('A', 3,2), tuple_list_class('C', 2,6)]from operator importitemgetter

sorted(tuple_list, key=itemgetter(1))

Out[119]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]from operator importattrgetter

sorted(tuple_list_, key=attrgetter('one')) #attrgetter 传入的参数必须是str

Out[120]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]#如果是根据多个类的参数排序,按照参数定义顺序

from operator importattrgetter

sorted(tuple_list_, key=attrgetter('two','one'))

Out[121]: [('C', 1, 5), ('C', 2, 6), ('A', 3, 2)]

高级用法

有时候,我们要处理的数据内的元素不是一维的,而是二维的甚至是多维的,那要怎么进行排序呢?这时候,sorted()函数内的key参数就派上用场了!从帮助信息上可以了解到,key参数可传入一个自定义函数。那么,该如何使用呢?让我们看看如下代码:

>>>l=[('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]>>>sorted(l, key=lambdax:x[0])

Out[39]: [('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]>>>sorted(l, key=lambda x:x[0], reverse=True)

Out[40]: [('e', 3), ('d', 4), ('c', 6), ('b', 2), ('a', 1)]>>>sorted(l, key=lambda x:x[1])

Out[41]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]>>>sorted(l, key=lambda x:x[1], reverse=True)

Out[42]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

这里,列表里面的每一个元素都为二维元组,key参数传入了一个lambda函数表达式,其x就代表列表里的每一个元素,然后分别利用索引返回元素内的第一个和第二个元素,这就代表了sorted()函数利用哪一个元素进行排列。而reverse参数就如同上面讲的一样,起到逆排的作用。默认情况下,reverse参数为False。

当然,正如一开始讲到的那样,如果想要对列表直接进行排序操作,可以用成员方法sort()来做:

>>>l.sort(key=lambda x : x[1])>>>l

Out[45]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]>>>l.sort(key=lambda x : x[1], reverse=True)>>>l

Out[47]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

对于三维及以上的数据排排序,上述方法同样适用。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值