用法
生成数组的常见方法/列表推导/生成器表达式
《笛卡儿积》
生成如图所示的RxS的4种花色,3种牌面的数组
常见方法
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for color in colors:
for size in sizes:
print((color, size))
列表推导
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
tshirts = [(color, size) for color in colors for size in sizes]
生成器表达式
生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。
colors = ['black', 'white']
sizes = ['S', 'M', 'L']
tshirts = ((color, size) for color in colors for size in sizes))
为什么使用列表推导
- 列表推导相较于常规写法可以减少代码行,且可读性更高
- 但是不一定非要使用列表推导。通常原则式,只用列表推导来创建新的列表,并且尽量保持简短已读,要是列表推导代码超过了两行,就不便于阅读代码了。
- python 2.x 中列表中使用外面的同名变量时会造成变量泄漏,python 3.x 不会
为什么使用生成器表达式
虽然也可以用列表推导来初始化元组、数组或其他序列类型,但是生成 器表达式是更好的选择。这是因为生成器表达式背后遵守了迭代器协 议,可以逐个地产出元素,而不是先建立一个完整的列表,然后再把这 个列表传递到某个构造函数里。前面那种方式显然能够节省内存。
参考文献
《流畅的Python》 © 2015 by Luciano Gama de Sousa Ramalho.