数据分析第三章

3.1.3  内建序列函数

python有很多有用的序列函数,你应当熟悉并择机选择。

3.1.3.1 enumerate

我们经常需要在遍历一个序列的同时及追踪当前元素的索引,一种自行实现的方法像下面的示例:

由于这种场景很常见,所以Python内建了enumerate函数,返回(i,value)元组的序列,其中i就是元素的索引,value使元素的值:

当你需要对数据建立索引时,一种有效的模式就是使用enumerate 构建一个字典,将序列值映射到索引位置上:

 3.1.3.2 sorted
 

sorted 函数返回一个根据任意序列中的元素新建的已排序列表:

 sorted 函数接收的参数于列表的sort方法一致。

3.1.3.3 zip

zip 将列表、元组或其他序列的元素配对,新建一个元素构成的列表:

 zip 可以处理任意长度的序列,它生成列表长度由最短的序列决定

 zip 的常用场景为同时遍历多个序列,有时候会和enumerate同时使用:

给定一个已“配对”得序列时,zip函数有一种机制得方式去“拆分”序列,这种方式得另一个思路就是将行得列表转换为列得列表,语法看上去略显魔幻:

 3.1.3.4 reversed

reversed 函数将序列得元素倒叙排列:

请牢记,reversed是一个生成器,因此如果没有实例化(例如使用list函数或进行for循环)的时候,它并不会产生一个倒叙的列表。

3.1.4 字典

 dict(字典)可能是Python内建数据结构中最重要的。它更为常用的名字是哈希表或者是关联数组。字典是拥有灵活尺寸的键值对集合,其中键和值都是Python对象,用大括号{} 是创建字典得一种方式,在字典中用逗号将键值对分隔:

你可以访问、插入或设置字典中得元素,就像访问列表和元组中得元素一样:

 你可以用检查列表或元组中是否含有一个元素的相同语法来检查字典是否含有一个键:

你可以使用del关键字或pop方法删除值,pop方法回在删除的同时返回被删除的值,并删除键: keys方法和values方法会分别为你提供字典键、值得迭代器。然而键值对并没有特定得顺序,这些函数输出得键、值都是按照相同得顺序:

你可以使用update 方法将两个字典合并:

update 方法改变了字典中元素位置,因此对于任何原字典中已经存在得键,如果传给update方法得数据也含有相同得键,则它得值将会被覆盖。

 3.1.4.1 从序列生成字典

通常情况下,你会有两个序列想要在字典中按元素配对,起初,你可能会写出这样得代码:

由于字典本质上是2-元组(含有两个元素得元组)得集合,字典是可以接收一个2-元组得列表作为参数的:

 

稍后我们将会讨论字典推导式,那是另一种构建字典的方法。

3.1.4.2 默认值

通常情况下,会有这样的代码逻辑:

 不过字典的get方法和pop方法可以返回一个默认值,因此上述的if-else代码块可以简写为:

 带有默认值的get方法会在key参数不是字典的键时返回None,而pop会抛出异常。一个常见的场景时字典中的值集合通过设置,成为另一种集合,比如列表。举个例子:

字典的setdefault方法就是为了这个目的而产生的。上述的for循环语句可以被写为:

内建的集合模块有一个非常有用的类,defaultdict,这个类是的上述目的的实现更为简单,想要生成符合要求的字典,你可以向字典中传入类型或能在各位置生成默认值的函数:

 3.1.4.3 有效的字典键类型

尽管字典的值可以是任何Python对象,但键必须是不可变的对象,比如标量类型(整数,浮点数,字符串)或元组(且元组内对象也必须是不可变对象)。这里要使用到一个数据叫哈希化,通过hash函数可以检查一个对象是否可以哈希化(即是否可以用作字典的键):
 为了将列表作为键,一种方式就是将其转换为元组,而元组只要它内部元素都可以哈希化,则它自己也可哈希化:

3.1.5 集合

集合是一种无序且元素唯一的容器。你可以认为集合也像字典,但是只有键没有值。集合可以有两种创建方式,通过set函数或者是用字面值集与大括号的语法:

简明的表达式转换传递给过滤器的元素,从而生成一个新的列表,列表推导式的基本形式为:

[ expr   for   val  in collection  if condition  ]

这与下面的for循环是等价的:

过滤条件是可以省略的,只保留表达式。例如,给定一个字符串列表,我们可以过滤出长度大于2的,并且将字母改成大写:
 

集合与字典的推导式是列表推导式的自然扩展,用相似的方式生成集合与字典。字典推导式如下所示:

 

集合推导式看起来很像列表推导式,只是中括号变成大括号:

set_comp={expr for value in collection if condition}

和列表推导式类似,集合、字典推导式非常方便,他们使代码更易读易写。如果有一个字符串的列表,假如我们想要一个集合,集合里包含列表中字符串的长度,我们可以通过集合推导式很方便的实现。

 

我们也可以使用map函数更函数化、更简洁的表达:

 

我们创建一个将字符串与其位置相匹配的字典作为字典推导式的简单示例:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值