代码环境:python3.6

两者简单对比如下:

image

  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)]

oldk
3 声望2 粉丝