python list排序的两种方法及实例讲解

作者:zhbnx 时间:2021-01-14 03:42:20 

对List进行排序,Python提供了两个方法

方法1.用List的内建函数list.sort进行排序

list.sort(func=None, key=None, reverse=False)

Python实例:


>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> list.sort()
>>> list
[2, 3, 5, 8, 9]

方法2.用序列类型函数sorted(list)进行排序(从2.4开始)

Python实例:


>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> sorted(list)
[2, 3, 5, 8, 9]

两种方法的区别:

sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象。

list.sort() 不会返回对象,改变原有的list。

其他sort的实例:

实例1:正向排序


>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]

实例2:反向排序


>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]

实例3:对第二个关键字排序


>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(lambda x,y:cmp(x[1],y[1]))
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]

实例4: 对第二个关键字排序


>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1])
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]

实例5: 对第二个关键字排序


>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

实例6:(DSU方法:Decorate-Sort-Undercorate)


>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项

为比较关键字进行排序.

效率比较:

cmp < DSU < key

通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当

多关键字比较排序:

实例7:


>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]

我们看到,此时排序过的L是仅仅按照第二个关键字来排的,

如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?有两种方法

实例8:


>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

实例9:


>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

为什么实例8能够工作呢?原因在于tuple是的比较从左到右比较的,比较完第一个,如果相等,比较第二个

来源:http://blog.chinaunix.net/uid-20775448-id-4222915.html

标签:python,list,排序
0
投稿

猜你喜欢

  • 用户凭什么跟你注册?

    2011-06-10 13:16:00
  • Pytorch模型微调fine-tune详解

    2021-06-17 07:29:00
  • 正则表达式判断号码靓号类型

    2009-10-31 18:48:00
  • python中终止协程和异常处理方式

    2022-10-18 05:44:41
  • MySql数据库基本命令集会

    2011-08-05 18:43:23
  • Christopher Schmitt 谈学习CSS的益处

    2008-07-13 14:15:00
  • 浏览器是怎样工作的(一):基础知识

    2012-05-09 20:32:48
  • Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

    2023-06-01 12:17:58
  • python使用Faker进行随机数据生成

    2023-12-21 14:24:33
  • 如何查询Top N及Top(M―N)记录?

    2009-11-11 20:03:00
  • Python pyecharts 数据可视化模块的配置方法

    2022-12-09 06:24:26
  • 面向对象的CSS

    2009-07-03 12:23:00
  • python 发送邮件的示例代码(Python2/3都可以直接使用)

    2023-05-12 08:53:56
  • PHP字符串中提取文件名的实例方法

    2023-06-12 18:57:32
  • uniapp实现支付功能

    2023-08-21 13:53:47
  • Python中字符串格式化str.format的详细介绍

    2021-08-19 01:28:37
  • Python判断telnet通不通的实例

    2023-07-27 14:56:08
  • 用js实现小球的自由移动代码

    2023-08-23 02:57:29
  • python 执行shell命令并将结果保存的实例

    2023-07-27 20:34:52
  • python多进程下的生产者和消费者模型

    2022-05-30 02:37:07
  • asp之家 网络编程 m.aspxhome.com