Python基础笔记(一)--列表推导和生成器表达式

列表推导

列表推导的书写形式:  
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
一个简单的例子:

symbols = '%^&*()'
codes = [ord(symbol) for symbol in symbols]
print(codes)

输出:[37, 94, 38, 42, 40, 41]

使用列表推导的原则是:只用列表推导来创建新的列表,并且尽量保持简短,如果列表推导的代码超过两行,就需要考虑使用for循环重写

一个稍微复杂点的例子--使用列表推导计算笛卡尔乘积:

colors = ['black', 'white']
sizes = ['S', 'M', 'L']

tshirts = [(color, size) for color in colors
                        for size in sizes]

print(tshirts)

输出:[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]

生成器表达式

虽然列表推导可以用来生成远足,数组或者其他序列类型,但是使用生成器表达式是更好的选择。因为列表推导是先建立一个完整的列表,然后把这个列表传递到某个构造函数里,如果裂变的长度太长,占用的内存就比较多。而生成器表达式遵守迭代器协议,可以逐个地产生元素。
生成器表达式与列表推导形式差不多,只不过将[]换成()
例子:

colors = ['black', 'white']
sizes = ['S', 'M', 'L']

for tshirt in ((c,s) for c in colors for s in sizes):
    print(tshirt)

输出:
('black', 'S')
('black', 'M')
('black', 'L')
('white', 'S')
('white', 'M')
('white', 'L')

你可能感兴趣的:(Python基础笔记(一)--列表推导和生成器表达式)