资讯专栏INFORMATION COLUMN

流畅的 Python - 1. 序列类型

IntMain / 2760人阅读

摘要:后面的先出场的是关于已经有序的序列的操作。这次使用的模块是,可以用来搜索,返回的是该元素应该插入在序列的哪个位置。但不可否认,数组对于一些固定类型的元素,操作效率更高。最后出场的是队列了。

今天看第二章,但是没看完,被其他事缠住了。

首先登场的是 Python 的内置序列类型,对此我并不陌生,但也有几个生面孔,但是基本的操作我想应该是一样的,只是类型不同。

对列表的操作中,经常用到的就是列表推导和生成器表达式。刚开始对这概念还有点模糊,之前只是听过,不清楚自己有没用过。但看书之后,发现自己都用过。

列表推导可用来优雅地创建一个新的列表,而生成器表达式可以优雅地创建其他类型的序列。除此之外,生成器表达式逐个产出元素比用 for 循环节省内存。

对于元组,之前的印象一直都是「不可变列表」。但现在发现元组的功能远比我想象的要强。首先元组就是记录的数据,字段和位置信息很重要,位置乱了,数据也就乱了。

一个新成员登场了,那就是具名元组。这个之前没接触过。同样的记录数据,这个可能会更加方便一点,因为数据记录更加清晰,书上介绍的一个属性(获取该对象的所有字段名称组成的元组)和两个函数(通过可迭代对象生成一个实例,和把具名元组以collections.OrderedDict的形式返回)。

对于元组的拆分,之前也用过,但是对*运算的却没怎么了解。除了可以用来忽略多余的元素,还可以「把一个可迭代对象拆开作为函数的参数」。平行赋值中,用在一个变量名前,表示不确定数量,也只能出现在一个变量名前。

对序列最常用的操作还有就是切片了。之前一直有接触但不怎么了解的就是s[a:b:c]了,它表示「对 s 在 a 和 b之间以 c 为间隔取值」。之前对此概念比较模糊,现在算是理清了。

一个之前没用过的技巧就是,对切片进行赋值。这把切片的内容直接替换了。还有 splice 对象,直接把切片包装了。

对列表的+*操作还是比较熟悉的,毕竟用的多。

最后就是排序了,列表自带的list.sort()和内置的sort函数不同,自带的函数把自身排序了,返回的是None,而内置的sort函数不破坏对象本身,而是返回一个新的对象,并且是稳定排序。

剩下的一点内容还没看完,明天看吧。


后面的先出场的是关于已经有序的序列的操作。这次使用的模块是bisect,可以用来搜索,返回的是该元素应该插入在序列的哪个位置。有可选参数,表示值相同时,应该插入到已有值的左边还是右边,默认是右边。插入操作就是用到了上面的方法。

然后是数组,之前一直没用过,如作者所说,列表实在是太好用了。但不可否认,数组对于一些固定类型的元素,操作效率更高。比如直接以二进制形式存到文件中比纯文本存消耗的空间要少得多,而且读取时也不用再进行转换。

然后是两个第三方模块,但主要讲了 Numpy 模块。Numpy 模块对于数学操作很方便,功能也很强大。想学的话,需要专门看一下。

内存视图的话,有点陌生。看了之后感觉还是有点不懂怎么用。

 内存视图其实是泛化和去数学化的 NumPy 数组。它让你在不需要复制内容的前提下,在数据结构之间共享内存。其中数据结构可以

是任何形式,比如 PIL图片、SQLite 数据库和 NumPy 的数组,等等。这个功能在处理大型数据集合的时候非常重要。

不过书上的例子的操作是看懂了。

最后出场的是队列了。列表虽然也能做到队列那样的操作,但是效率是个问题。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41568.html

相关文章

  • 流畅python读书笔记-第二章Python 数据结构

    摘要:把具名元组以的形式返回,我们可以利用它来把元组里的信息友好地呈现出来。数组支持所有跟可变序列有关的操作,包括和。双向队列和其他形式的队列类双向队列是一个线程安全可以快速从两端添加或者删除元素的数据类型。 列表表达式 >>> symbols = $¢£¥€¤ >>> codes = [ord(symbol) for symbol in symbols] >>> codes [36, 16...

    syoya 评论0 收藏0
  • 流畅python读书笔记-第11章-接口:从协议到抽象基类

    摘要:自己定义的抽象基类要继承。抽象基类可以包含具体方法。这里想表达的观点是我们可以偷懒,直接从抽象基类中继承不是那么理想的具体方法。 抽象基类 抽象基类的常见用途: 实现接口时作为超类使用。 然后,说明抽象基类如何检查具体子类是否符合接口定义,以及如何使用注册机制声明一个类实现了某个接口,而不进行子类化操作。 如何让抽象基类自动识别任何符合接口的类——不进行子类化或注册。 接口在动态类...

    Kyxy 评论0 收藏0
  • 流畅python读书笔记-第十章-序列修改、散列和切片

    摘要:例如,的序列协议只需要和两个方法。任何类如,只要使用标准的签名和语义实现了这两个方法,就能用在任何期待序列的地方。方法开放了内置序列实现的棘手逻辑,用于优雅地处理缺失索引和负数索引,以及长度超过目标序列的切片。 序列的修改、散列和切片 接着造Vector2d类 要达到的要求 为了编写Vector(3, 4) 和 Vector(3, 4, 5) 这样的代码,我们可以让 init 法接受任...

    cpupro 评论0 收藏0
  • 流畅python

    摘要:流畅的中有很多奇技淫巧,整本书都在强调如何最大限度地利用标准库。常见的扁平序列包括,,等。数组支持所有跟可变序列有关的操作,包括和。和用于指定列表的区间,默认是使用整个列表。但是元组的赋值不被允许,当异发生时 流畅的python中有很多奇技淫巧,整本书都在强调如何最大限度地利用Python 标准库。介绍了很多python的不常用的数据类型、操作、库等,对于入门python后想要提升对p...

    Alan 评论0 收藏0
  • 流畅python读书笔记-第一章Python 数据模型

    摘要:第一章数据类型隐式方法利用快速生成类方法方法通过下标找元素自动支持切片操作可迭代方法与如果是一个自定义类的对象,那么会自己去调用其中由你实现的方法。若返回,则会返回否则返回。一个对象没有函数,解释器会用作为替代。 第一章 python数据类型 1 隐式方法 利用collections.namedtuple 快速生成类 import collections Card = collec...

    tomener 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<