Bullet Option:
- sort(*, key=None, reverse=None)
sort方法用于原地排序,可以接收两个keyword-only参数,并且此方法是的排序是稳定的。
key:一个表达式,比较时会根据该表达式的计算结果进行排序
reverse:默认False,升序排列;True,降序排列
默认使用升序排列
>>> source=[5,2,8,4,3,6,7] >>> source.sort() >>> print(source) [2, 3, 4, 5, 6, 7, 8]
reverse=True,使用降序排列
>>> source=[5,2,8,4,3,6,7] >>> source.sort(reverse=True) >>> print(source) [8, 7, 6, 5, 4, 3, 2]
key用于输入计算权重的方法,排序会按照权重排序,而不是按照原值排序
>>> def cal_priority(target): return 0-target >>> source=[5,2,8,4,3,6,7] >>> result=[cal_priority(item) for item in source] >>> print(result) [-5, -2, -8, -4, -3, -6, -7] >>> source.sort(key=cal_priority) >>> print(source) [8, 7, 6, 5, 4, 3, 2]
- sorted(iterable[, key][, reverse])
sorted()方法与sort()方法类似,不过前者会返回一个新的列表,原列表不会有影响。
- 列表推导
列表推导是非常有趣的一个功能,在前面sort()方法中就已经使用到了,简洁的语法可以在使用中节省不少代码。
>>> def cal_priority(target): return 0-target >>> source=[5,2,8,4,3,6,7] >>> result=[cal_priority(item) for item in source] >>> print(result) [-5, -2, -8, -4, -3, -6, -7]
通过语法结构也可以很清晰的了解是怎么做的,整体的阅读方向是从右向左:
首选一对“[]”说明这个会返回一个列表,其中的“for item in source”说明需要对一个目标列表进行循环操作,“cal_priority(item)”表示要对这个循环中的每个数据怎么计算。
- 分片
分片也是有效节省代码的方法,简单的“:”就可以轻松筛选出列表中指定部分,甚至可以轻松的复制列表
list[m:n]表示返回列表第m个位置到第n个位置的列表项,但不包括第m个位置,如果m、n为空,则返回原列表的拷贝
>>> source=[1,2,3,4,5,6]>>> print(source[2:5]) [3, 4, 5] >>> result=source[:] >>> print(result) [1, 2, 3, 4, 5, 6] >>> result=[] >>> print(source) [1, 2, 3, 4, 5, 6]
- class set([iterable])
看了文档才发现,其实这是个class,而不是一个方法OTZ。集合类的一个应用场景就是去重,效果立竿见影。
除了去重这个,集合本身也是很有趣的数据结构,可是实现很多有意思的功能。
python中还有一种叫做class frozenset([iterable])的集合类型,顾名思义,frozenset是被冻住的,不能修改其中的数据。
>>> source=[5,5,7,2,8,4,3,4,6,7] >>> sourceset=set(source) >>> print(sourceset) {2, 3, 4, 5, 6, 7, 8}
为什么输出是排序过的,重复了好多次都是这样???