台州网站搜索优化,网站开发制作步骤图,久久建筑网下载,lnmp wordpress目录#xff1a;本篇开始总结 Python 基本的数据结构#xff0c;大部分情况下#xff0c;这些数据结构就已经够用了#xff0c;不需要重复造轮子。首先是序列及其相关的操作。序列(Sequence)标准库中提供了很多序列类型#xff0c;都是C实现的#xff0c;效率很高。容器序…目录本篇开始总结 Python 基本的数据结构大部分情况下这些数据结构就已经够用了不需要重复造轮子。首先是序列及其相关的操作。序列(Sequence)标准库中提供了很多序列类型都是C实现的效率很高。容器序列(Container sequences)list, tuple, collections.deque ...容器序列持有的是所包含对象的引用可以是任意类型。平坦序列(Flat sequences)str, bytes, bytearray, memoryview, array.array平坦序列物理上存储每个条目对应的内存空间的值而不是作为不同的对象。因此平坦序列更加紧凑但是他们只能保存原始的数值如字符字节和数字。根据可不可变分类可变的序列list, bytearray, array.array, collections.deque, memoryview不可变序列tuple, str, bytes如何快速生成一个序列列表推导(List Comprehensions)生成器表达式(Generator Expressions)强烈推荐列表推导用它实现的代码简洁易读执行效率高堪称完美。首先举一个例子取出一个字符串列表中所有小写的字符串并组成列表 words [The, quick, BROWN, Fox, jumped, OVER, the, Lazy, DOG] [word for word in words if word.islower()][quick, jumped, the]列表推导格式以 [] 为标志内容分为三部分 [A B C]A,B,C分别代表一个表达式其中C可以省略。对于上面的例子AwordBfor word in wordsCif word.islower()首先看BB的格式一般为 for x in xxx表示从一个序列中逐个选取元素也就是常用的 for in 结构。可以有多个for in比如 for x in xxx for y in yyy。使用多个for的时候就会生成所有组合。例如列举出不同颜色尺寸的T恤组合 colors [black, white] sizes [S, M, L] tshirts [(color, size) for color in colors for size in sizes] tshirts[(black, S), (black, M), (black, L), (white, S),(white, M), (white, L)]然后看CC提供一个判断条件格式一般为 if xxx其中可以用到B所给出的x用于选取符合条件的条目。可以省略也就意味着使用B生成的所有条目。最后看AA格式随意可以使用B中给出的x(或者y)当然也可以不使用。 [word[0] for word in words if word.islower()][q, j, t] [3 for word in words if word.islower()][3, 3, 3]列表推导时一般控制在一行以内如果只有多行才能实现那说明逻辑太复杂了考虑别用列表推导了展开吧。生成器表达式和列表推导唯一的不同是用 () 包围而不是 []如果不需要一次性生成整个列表那么用生成器表达式更好。如下 (word for word in words if word.islower()) at 0x02F00288这样只是构造了一个生成器对象每个元素会在需要用到的时候才进行构造可以原封不动地用于 for in 结构需要变成列表的时候也可以随时调用 list() 函数转化为列表。元组(Tuple)元组的主要用途作为不可变的列表作为没有字段名称的记录元组解包 lax_coordinates (33.9425, -118.408056) latitude, longitude lax_coordinates # tuple unpacking latitude33.9425 longitude-118.408056作为函数参数就地展开在前面加*就可以了 divmod(20, 8)(2, 4) t (20, 8) divmod(*t)(2, 4)具名元组(Named Tuples)因为元组作为记录比较好用因此出现了 namedtuple在 collections 模块中。使用 namedtuple 创建的实例消耗的内存和普通元组相同因为字段的名字是存储在类中的。他们使用的内存比普通的类要少因为它们不用在每个实例的 __dict__ 中存储属性。使用示例 from collections import namedtuple Point namedtuple(Point, x y) p Point(3, 4) pPoint(x3, y4) p.x3 p[1]4namedtuple 有几个有用的属性和方法_fields 类属性保存所有字段名称 Point._fields(x, y)_make(iterable) 类方法使用已经存在的序列或者 iterable 来创建 namedtuple point_tuple (3, 4) p Point._make(point_tuple) pPoint(x3, y4)_asdict() 实例方法返回一个 OrderedDict映射名称和对应的值。 p._asdict()OrderedDict([(x, 3), (y, 4)])总结Python 中序列的用法是大同小异的基本上掌握了一个其他的都差不多剩下的就是可不可变存储的是值还是引用需要注意下。使用列表推导来构建序列能够让代码变得非常简洁容易理解推荐多尝试使用。元组用来作为数据记录比较好用namedtuple 使得元组在保持低内存消耗的情况下更加容易调试。