11.1 列表推导式

列表推导式是Python基础,好用,而又非常重要的功能。本质上可以把列表推导式理解成一种集合了变换和筛选功能的函数,通过这个函数把一个列表转换成另一个列表。注意是另一个新列表,原列表保持不变。

11.1.1 列表推导式书写形式

[表达式 for 变量 in 列表]

[表达式 for 变量 in 列表 if 条件]

其中表达式是生成的列表中的元素,利用后面的for循环和if条件,生成前面的每一个元素。

例如,生成1-10的平方列表:

>>> [x ** 2 for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

如果对x要进一步的筛选,就加上if条件,例如生成1-10中偶数的平方列表:

>>> [x ** 2 for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

从结果上可以看出:如果有筛选条件的话是先筛选再计算表达式,即先筛掉不满足条件的元素,再进行表达式计算。如果有多个条件,在后面再加上if条件即可,例如:生成大于5的偶数的平方列表:

>>> [x ** 2 for x in range(1, 11) if x % 2 == 0 if x > 5]
[36, 64, 100]

11.1.2 其它推导式

Python中还有字典推导式、集合推导式等,与列表推导式使用方式大致相同。

例如:

>>> d = {'aa': 10, 'bb': 20, 'cc': 30}

>>> {key + 'zz': value + 5 for key, value in d.items()}
{'aazz': 15, 'bbzz': 25, 'cczz': 35}

>>> {k: v for k, v in zip('abcde', range(10, 60, 10))}
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}

>>> {x ** 2 for x in [1, 1, 2, 3]}
{1, 4, 9}