Head Frist Python 读书笔记 第五章 处理数据

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}

为什么输出是排序过的,重复了好多次都是这样???

 

posted on 2015-11-22 18:11  Lv Jianwei  阅读(273)  评论(0编辑  收藏  举报