网站建设的隐私条款,网站模版修改,建设网站的程序,怎样使用自己的电脑做网站参考链接#xff1a; Python中的函数
Python列表排序 list.sort方法和内置函数sorted
很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表.
这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内…参考链接 Python中的函数
Python列表排序 list.sort方法和内置函数sorted
很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表.
这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别.
一、list.sort方法
list.sort方法会就地排序列表也就是说不会把原列表复制一份。这也是这个方法的返回值是None的原因提醒您本方法不会新建一个列表。
在这种情况下返回None其实是Python的一个惯例如果一个函数或者方法对对象进行的是就地改动那它就应该返回 None好让调用者知道传入的参数发生了变动而且并未产生新的对象。
来看一下代码
# codingutf-8
list_a [1, 2, 8, 3, 7, 9, 5, 7]
# sort()方法没有返回值
list_b list_a.sort()
print(list_a: , list_a)
print(list_b: , list_b)
运行结果
list_a: [1, 2, 3, 5, 7, 7, 8, 9]
list_b: None
用返回None来表示就地改动这个惯例有个弊端那就是调用者无法将其串联起来。而返回一个新对象的方法则正好相反,它们可以链式调用从而形成连贯接口。
二、sorted内置函数
与 list.sort 相反,内置函数sorted会新建一个列表作为返回值。
这个方法可以接受任何形式的可迭代对象作为参数甚至包括不可变序列或生成器而不管sorted接受的是怎样的参数它最后都会返回一个列表。
代码示例:
list_c [1, 2, 8, 3, 7, 9, 5, 7]
# sorted内置函数会返回一个排序后的新列表
list_d sorted(list_c)
print(list_c: , list_c)
print(list_d: , list_d)
运行结果
list_c: [1, 2, 8, 3, 7, 9, 5, 7]
list_d: [1, 2, 3, 5, 7, 7, 8, 9]
可以看到使用内置函数sorted时返回了一个新的列表而原列表没有发生改变。
这有两种好处
1.如果我们即需要使用原列表也需要使用排序后的列表或者说我们要将一个非列表的可迭代对象排序成列表sorted都可以做到
2.有返回值时我们可以进行链式调用
# 可以对非列表的可迭代对象排序生成列表
str_e python
list_e sorted(str_e)
print(list_e) # 链式调用
str_f -.join(sorted(str_e)).upper().split(-)
print(str_f) 运行结果
[h, n, o, p, t, y]
[H, N, O, P, T, Y]
三、关键字参数key和reverse
不管是 list.sort 方法还是 sorted 函数都有两个可选的关键字参数:
key 接收一个只有一个参数的函数这个函数会被用在序列里的每一个元素上所产生的结果将是排序算法依赖的对比关键字。
比如说在对一些字符串排序时可以用 keystr.lower 来实现忽略大小写的排序或者是用 keylen 进行基于字符串长度的排序。key的默认值是恒等函数也就是默认用元素自己的值来排序。
reverse:
如果被设定为 True被排序的序列里的元素会以降序输出(也就是说把最大值当作最小值来排序),reverse的默认值是 False.
phone (HUAWEI, OPPO, MI, MEIZU, VIVO)
# 按长度进行排序
phone_list sorted(phone, keylen)
print(phone_list) phone_list_re sorted(phone, keylen, reverseTrue)
print(phone_list_re)
运行结果
[MI, OPPO, VIVO, MEIZU, HUAWEI]
[HUAWEI, MEIZU, OPPO, VIVO, MI]
上面的代码中第一次排序新建了一个按照长度排序的字符串列表。第二次排序是将按长度排序由升序变成了降序。
细心的您应该可以发现第二次的结果并不是第一次排序的结果的完全翻转。
OPPO和VIVO的长度都是4reverseTrue后它们的相对位置跟第一次排序是一样的。这是什么原因呢
sorted和list.sort背后的排序算法都是Timsort它是一种自适应算法会根据原始数据的顺序特点交替使用插入排序和归并排 序以达到最佳效率。
Python的排序算法Timsort是稳定的知道这一点就可以了意思是就算两个元素比不出大小在每次排序的结果里它们的相对位置是固定的。
因为用到的排序算法是稳定的也就是说在长度一样时OPPO和VIVO的相对位置不会改变。 关于list.sort()方法和sorted内置函数的使用现在已经掌握了~