list comprehension
列表推导式
A compact way to process all or part of the elements in a sequence and return a list with the results.——Python3 Document
处理一个序列中的所有或部分元素并返回结果列表的一种紧凑写法.
推导式,又被翻译为解析式,是Python的一种独有特性,他可以将一个数据序列通过一定的推导逻辑规则构建出一个新的数据序列。
Python中一共有三种推导式,在python2&Python3中都有支持:
- 列表(list)推导式
- 集合(set)推导式
- 字典(dict)推导式(Python2.7+)
基本格式:
新列表 = [表达式 for 变量 in 原列表/集合/字典 if 条件]
通常我们处理循环的时候使用的都是for循环:
- 遍历一个列表
_list = [1,2,3,4,5,'a','b','c'] for i in _list: print(i)
- 遍历列表的过程中进行判断
_list = [1,2,3,4,5,'a','b','c'] _list_new = [] for i in _list: if type(i) == str: _list_new.append(i) print(_list_new)
而如果使用列表推导式,往往可以更加简便的去处理:
```python
_list = [1,2,3,4,5,'a','b','c']
# 遍历打印列表,
[print(i) for i in _list]
# 遍历+判断
_list_new = [i for i in _list if type(i) == str]
print(_list_new)
```
当然第一种遍历打印的方式我并不建议这样去写,会显得很奇怪.第二个例子很好的说明了列表推导式的方便之处,原本需要三行的代码(遍历,判断,处理)在后面只需要一行就能够解决。
推导逻辑
- 条件过滤逻辑(推导逻辑在if条件中)
multi = [i for i in range(10) if i % 3 ==0]
print(multi)
- 表达式赋值逻辑(推导逻辑在表达式中)
multi = [i*i for i in range(10)]
print(multi)
- 多列表数据源
multi = [(x,y) for x in range(5) if x % 2 ==0 for y in range(5) if y % 2 ==1]
print(multi)
执行效率
列表推导式在执行效率上比使用for循环快了将近一半的速度。
网友评论