list排序sort降序_list.sort和高阶函数sorted

代码环境:python3.6

两者简单对比如下:

bb41d3634cc96ebb53787c33260b40f1.png
  1. list.sort是原列表排序,而sorted会返回新列表;
  2. 可选参数keyreverse的意义和用法都一样。

reverse 用法最简单,reverse=True时降序输出,reverse=False时升序输出。这个参数的默认值是False

key 是一个函数,我们可以用 python 内置函数或自定义函数,让序列按我们想要的方式进行排序,下面我们用代码感受一下:

In [1]: a_list = [36, 5, -12, 9, -21]

In [2]: b_list = [36, 5, -12, 9, -21]

In [3]: sorted(a_list)
Out[3]: [-21, -12, 5, 9, 36]

In [4]: a_list
Out[4]: [36, 5, -12, 9, -21]

# 按映射后的绝对值排序
In [5]: sorted(a_list, key=abs)
Out[5]: [5, 9, -12, -21, 36]

In [6]: b_list.sort()

In [7]: b_list
Out[7]: [-21, -12, 5, 9, 36]

In [8]: c_list = ['bob', 'about', 'Zoo', 'Credit']

In [9]: sorted(c_list)
Out[9]: ['Credit', 'Zoo', 'about', 'bob']

# 忽略大小写,按字母顺序排序
In [10]: sorted(c_list, key=str.lower)
Out[10]: ['about', 'bob', 'Credit', 'Zoo']

# 按字符串长度排序
In [11]: sorted(c_list, key=len)
Out[11]: ['bob', 'Zoo', 'about', 'Credit']

上面我们只用了key是内置函数的情况,下面用另一个例子看看key是自定义函数的用法。

给出一个列表L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)],列表中每个元素包括了学生的姓名和成绩。要求:

  1. 按名字排序;
  2. 按成绩从高到低排序。
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]


def order_by_name(arg_tuple):
    # 元组参数传进来直接映射为元祖的第1个元素,返回进行对比
    return arg_tuple[0]


def order_by_score(arg_tuple):
    # 元组参数传进来直接映射为元祖的第2个元素,返回进行对比
    return arg_tuple[1]


if __name__ == "__main__":
    print('默认排序结果:{}'.format(sorted(L)))
    print('按姓名排序结果:{}'.format(sorted(L, key=order_by_name)))
    print('按成绩排序结果:{}'.format(sorted(L, key=order_by_score, reverse=True)))


# 运行结果:
# 默认排序结果:[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
# 按姓名排序结果:[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
# 按成绩排序结果:[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值