python列表

Python 标准库用 C 实现了丰富的序列类型,列举如下。
容器序列
list、tuple 和 collections.deque 这些序列能存放不同类型的数据。
扁平序列
str、bytes、bytearray、memoryview 和 array.array,这类序列只能容纳一种类型。
容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是 引用。换句话说,扁平序列其实是一段连续的内存空间。由此可见扁平序列其实更加紧 凑,但是它里面只能存放诸如字符、字节和数值这种基础类型。

序列类型还能按照能否被修改来分类。
可变序列
list、bytearray、array.array、collections.deque 和 memoryview。
不可变序列
tuple、str 和 bytes

列表推导
最重要也最基础的序列类型应该就是列表(list)了。list 是一个可变序列,并且能同时 存放不同类型的元素。对于列表,大家都比较熟悉,不在多余重复。列表推导是一种构建列表的方法,它异常强大,对于列表推导式,在我的博客里有专门的介绍,这里就不在多说,现在说说,列表推导式虽然异常强大,但也可能会被滥用
另一方面,列表推导也可能被滥用。以前看到过有的 Python 代码用列表推导来重复获取一 个函数的副作用。通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了。(Python 会忽略代码里 []、{} 和 () 中的换行,因此如果你的代码里有多行的列 表、列表推导、生成器表达式、字典这一类的,可以省略不太好看的续行符 \。)

生成器表达式
虽然也可以用列表推导来初始化元组、数组或其他序列类型,但是生成器表达式是更好的 选择。这是因为生成器表达式背后遵守了迭代器协议,可以逐个地产出元素,而不是先建 立一个完整的列表,然后再把这个列表传递到某个构造函数里。前面那种方式显然能够节 省内存。
生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。

用生成器表达式初始化元组和数组

symbols = '$¢£¥€¤' 
tuple(ord(symbol) for symbol in symbols) 
(36, 162, 163, 165, 8364, 164)

import array
array.array('I', (ord(symbol) for symbol in symbols))
array('I', [36, 162, 163, 165, 8364, 164])

1,如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围 起来。
2, array 的构造方法需要两个参数,因此括号是必需的。array 构造方法的第一个参数指 定了数组中数字的存储方式。

生成器表达式逐个产出元素,从来不会一次性产出多个列表。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值