list.sort
方法 :
list.sort
方法会就地排序列表,也就是说不会把原列表复制一份。
list.sort 有两个可选参数 key 和 reverse。
reverse 是 bool 类型,默认为 False,升序排序;设置为 True 时为降序排序;
key 接受一个只有一个参数的函数,
这个函数会被用在序列里的每一个元素上,所产生的结果将是排序算法依赖的对比关键字。
t = [3, 1, 4, 2, 8, 5, 6, 9, 7, 0]
print(id(t)) # 4520988552
# 排序,默认升序
t.sort() # list.sort() id 不变,不返回值
print(t) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(id(t)) # 4520988552
# 降序排序
t.sort(reverse=True)
print(t) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(id(t)) # 4520988552
l = ['Python', 'Java', 'JavaScript', 'Go']
# 根据每个元素的长度降序排序,也是原地修改
l.sort(key=len, reverse=True)
print(l) # ['JavaScript', 'Python', 'Java', 'Go']
内置函数 sorted:
与 list.sort
相反的是内置函数 sorted
,它会新建一个列表作为返回值。sorted
可以接受任何形式的可迭代对象作为参数,甚至包括不可变序列或生成器。而不管 sorted
接受的是怎样的参数,它最后都会返回一个列表。
sorted 同样有两个可选参数 key 和 revuerse;
# 内置函数 sorted 方法会新建一个列表作为返回值,
# 它接受任何可迭代对象作为参数,包括不可变序列和生成器,不管接受的什么都返回一个新的列表;
t = [3, 1, 4, 2, 8, 5, 6, 9, 7, 0]
l = sorted(t, reverse=True)
print(t) # [3, 1, 4, 2, 8, 5, 6, 9, 7, 0],原列表没发生变化
print(l) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
r = ['A', 'Watermelon', 'Banana', 'Apple']
# 根据每个元素的长度进行排序,会返回新列表
j = sorted(r, key=len)
print(r) # ['A', 'Watermelon', 'Banana', 'Apple']
print(j) # ['A', 'Apple', 'Banana', 'Watermelon']