zl程序教程

您现在的位置是:首页 >  后端

当前栏目

列表排序

2023-09-14 08:59:05 时间

列表排序

https://www.cnblogs.com/whaben/p/6495702.html

1、简单的升序排序是非常容易的。只需要调用sorted()方法。它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序。

>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]

  

2、你也可以使用list.sort()方法来排序,此时list本身将被修改。通常此方法不如sorted()方便,但是如果你不需要保留原来的list,此方法将更有效。

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

  

延伸:

l = [2, 1, 3]
print(l)
print("==========排序==========")
# sorted()函数 递减排序
print(sorted(l, reverse=True))
# sort() 递增排序
l.sort(reverse=False)
print(l)

  

输出:

[2, 1, 3]
==========排序==========
[3, 2, 1]
[1, 2, 3]

 

3、复杂情况下的排序:sorted和lambda

例1:

假如a是一个由元组构成的列表,这时候就麻烦了,我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法,不要写成别的单词;x表示列表中的一个元素,在这里,表示一个元组,x只是临时起的一个名字,你可以使用任意的名字;x[0]表示元组里的第一个元素,当然第二个元素就是x[1];所以这句命令的意思就是按照列表中第一个元素排序  

a = [('b', 4), ('a', 0), ('c', 2), ('d', 3)]
b = sorted(a, key=lambda x: x[0])
print(b)

  

输出:

[('a', 0), ('b', 4), ('c', 2), ('d', 3)]

 

例2:

将列表按照下列规则排序:

1. 正数在前,负数在后
2. 正数从小到大
3. 负数从大到小

- 例子:
- 排序前:[7,-8,5,4,0,-2,-5]
- 排序后:[0, 4, 5, 7, -2, -5, -8]

alist = [7, -8, 5, 4, 0, -2, -5]
blist = sorted(alist, key=lambda x: (x < 0, abs(x)))  # 这里排序条件返回元组,先比较第一个,再第二个值
print(blist)

  

输出:

[0, 4, 5, 7, -2, -5, -8]