栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python list sort学习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python list sort学习

文章目录
  • 前言
  • 1. 基本排序
  • 2. 使用key排序
    • 按成绩排序
    • 成绩相同按年龄降序


前言

刷题的时候遇到要对一个列表里第一个元素升序,在第一个元素相同的时候降序的操作。
python应该有简单的方法所以顺便总结一下python list 里的sort

1. 基本排序

在python中有两种排序方法

  1. sorted(iterable, cmp=None, key=None, reverse=False)
    iterable – 可迭代对象。
    key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
  2. list.sort(cmp=None, key=None, reverse=False)

简单的升序排序非常简单:只需调用 sorted() 函数。它返回一个新的排序后列表
你也可以使用 list.sort() 方法,它会直接修改原列表(并返回 None 以避免混淆),通常来说它不如 sorted() 方便 ——— 但如果你不需要原列表,它会更有效率。

a = [2,5,3,4,6,8,5]
print('sorted a is: ',sorted(a))
# sorted a is:  [2, 3, 4, 5, 5, 6, 8]
a.sort()
print('sorted a is: ',a)
# sorted a is:  [2, 3, 4, 5, 5, 6, 8]
2. 使用key排序

students = [(‘jane’,‘B’, 16), (‘dave’,‘A’, 14), (‘Amy’, ‘C’, 15), (‘john’,‘A’, 15), (‘Bob’, ‘B’, 14),]

按成绩排序

key = lambda x: x[1]

students = [('jane','B', 16), ('dave','A', 14), ('Amy', 'C', 15), ('john','A', 15), ('Bob', 'B', 14),]
sorted(students, key = lambda x: x[1]) 
students.sort(key = lambda x: x[1])
print(students)
# [('dave', 'A', 14), ('john', 'A', 15), ('jane', 'B', 16), ('Bob', 'B', 14), ('Amy', 'C', 15)]
成绩相同按年龄降序

上面结果中(‘dave’, ‘A’, 14), (‘john’, ‘A’, 15)成绩相同,年龄是升序, 想变成降序

students = [('jane','B', 16), ('dave','A', 14), ('Amy', 'C', 15), ('john','A', 15), ('Bob', 'B', 14),]
def multisort(s, specs):
    for keyid, reverse in reversed(specs):
        s.sort(key = lambda x: x[keyid], reverse = reverse)
    return s
print(multisort(students, ((1, False),(2, True))))
# [('john', 'A', 15), ('dave', 'A', 14), ('jane', 'B', 16), ('Bob', 'B', 14), ('Amy', 'C', 15)]

可以看见结果中前两项发生了反转, 按年龄降序排列了。
注意这里对specs遍历的时候是反向遍历的

还有一种相对简单的写法
如果需要降序的是数字的话可以这样, 因为数字的负数升序就是原数组降序

students = [('jane','B', 16), ('dave','A', 14), ('Amy', 'C', 15), ('john','A', 15), ('Bob', 'B', 14),]
print(sorted(students, key = lambda x: (x[1], -x[2])) )
# [('john', 'A', 15), ('dave', 'A', 14), ('jane', 'B', 16), ('Bob', 'B', 14), ('Amy', 'C', 15)]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530234.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号