Python 推倒式
列表、集合和字典推导式
列表推导式是Python最受喜爱的特性之一
- 它允许用户方便的从一个集合过滤元素,形成列表
- 在传递参数的过程中还可以修改元素
语法如下
[expr for val in collection if condition]
等同于
result = []
for val in collection:
if condition:
result.append(expr)
filter条件可以被忽略,只留下表达式就行
'''给定一个字符串列表
过滤出长度在2及以下的字符串
并将其转换成大写
'''
>>> strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
>>> [x.upper() for x in strings if len(x) > 2]
['BAT', 'CAR', 'DOVE', 'PYTHON']
用相似的方法,还可以推导集合和字典
dict_comp = {key-expr : value-expr for value in collection if condition}
'''返回字符串在列表中的位置
'''
>>> strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
>>> {val : index for index, val in enumerate(strings)}
{'a': 0, 'as': 1, 'bat': 2, 'car': 3, 'dove': 4, 'python': 5}
集合的推导式与列表很像,只不过用的是尖括号
set_comp = {expr for value in collection if condition}
'''返回列表内字符串的长度
'''
>>> strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
>>> {len(x) for x in strings}
{1, 2, 3, 4, 6}
# map函数可以进一步简化
>>> set(map(len, strings))
{1, 2, 3, 4, 6}
嵌套列表推倒式
嵌套列表推导式看起来有些复杂
列表推导式的for部分是根据嵌套的顺序,过滤条件还是放在最后
'''将一个整数元组的列表扁平化成了一个整数列表
'''
>>> some_tuples = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
>>> [x for tup in some_tuples for x in tup]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# 等同于
>>> flattened = []
>>> for tup in some_tuples:
... for x in tup:
... flattened.append(x)
...
>>> flattened
[1, 2, 3, 4, 5, 6, 7, 8, 9]