前言
本文为《流畅的python》的2.2节的学习笔记。
列表推导式
代码展示
#ord函数说明:Return the Unicode code point for a one-character string.
symbols = '$¢£¥€¤'
code = []
for symbol in symbols:
code.append(ord(symbol))
print(code)
>>>[36, 162, 163, 165, 8364, 164]
说明:
此段代码作用是把一个字符串变成Unicode 码位的列表。
symbols = '$¢£¥€¤'
code1 = [ord(symbol) for symbol in symbols]
print(code1)
>>>[36, 162, 163, 165, 8364, 164]
说明:
以列表推导式重写以上代码。
列表推导式的使用原则:
通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。如序列构成的数组果列表推导的代码超过了两行,你可能就要考虑是不是得用for 循环重写了。
当所写的列表推导式太长时,可读性会大幅较低,可以使用以下Python语法提高可读性: **Python 会忽略代码里[]、{} 和() 中的换行,因此如果你的代码里有多行的列表、列表推导、生成器表达式、字典这一类的,可以省略不太好看的续行符**。
# beyond_ascii = [ord(s) for s in symbols if ord(s) >127]
symbols = '$¢£¥€¤'
beyond_ascii = [ord(s)
for s in symbols
if ord(s) >127]
print(beyond_ascii)
>>>[162, 163, 165, 8364, 164]
说明:
将一个长列表推导式分行为以上样式,可读性大大提高。
此代码对每个输出的Unicode码数值做了过滤,Unicode码数值需大于127才添加到列表。
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')]
说明:
此段代码作用是以颜色和大小以列表推导式推导组合。
生成器表达式
生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。
代码展示
for tshirt in ('%s %s' % (color, size)
for color in colors
for size in sizes) :
print(tshirt)
>>>black S
black M
black L
white S
white M
white L
说明:
此段代码作用是以颜色和大小以生成器表达式推导组合。
生成器表达式逐个产出元素,不会一次性产出一个含有6 个T 恤样式的列表。当数据量很大时,如1000*1000个元素生成列表时,生成器表达式可以节省很大的内存。
总结
- 列表推导式
清楚列表推导式的使用原则,同时注意其可读性。
- 生成器表达式
当数据量很大时,使用生成器表达式而不是列表推导式,可以节省很大的内存。