Python支持各种解析(comprehension)操作,比如列表解析、集合解析、元组解析、字典解析。它们根据某些元素来创建(推导)出一个新的列表、集合、元组、字典等。所以有的地方也称为推导,比如列表推导、集合推导等。
下面是一个列表解析的示例:
1 >>> [ i*2 for i in range(10) if i % 2 == 0 ]
2 [0, 4, 8, 12, 16]
我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、
数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取
这里是列表解析,因为使用的中括号[ xxxx ]
,它表示根据条件推导出一个新的列表。Python中几种内置类型的解析规则为:
- 如果使用的是中括号,表示列表解析
- 如果使用的是大括号,表示集合解析
- 如果使用的是大括号,且里面的元素是
key:value
模式,表示字典解析
注意:如果使用的是括号,表示的是生成器表达式,而不是解析。
例如:
1 # 集合解析
2 >>> { i*2 for i in "abcd"}
3 {'aa', 'cc', 'dd', 'bb'}
4
5 # 字典解析
6 >>> { k:v for k,v in zip(("one","two","three"),(1,2,3)) }
7 {'one': 1, 'two': 2, 'three': 3}
8 >>> { k: k*2 for k in "abcd" }
9 {'a': 'aa', 'b': 'bb', 'c': 'cc', 'd': 'dd'}
当然,Python中还有其它解析模式。
数学概念中的解析
计算机语言中的解析来自于数学概念中的集合描述(对应于集合解析)。如下图:
将此与下面的列表解析进行对应:
[ i * 2 for i in range(10) if i % 2 == 0 ]
其中:
x ∈ N
表示的是装元素的容器,这个容器里的元素是解析时被迭代的对象
- 这对应于列表解析中的
range(10)
,对于Python来说,只要是可迭代的数据对象,都可以作为元素的提供容器
x
是变量,是容器中的元素
- 对应于列表解析中的
i
x² > 3
表示的是谓词,是可选的条件判断式,用来筛选解析过程中的符合条件的元素
- 这对应于列表解析中的
if i % 2 == 0
,注意,谓词部分是可选的
2 * x
表示的是外部表达式,用来生成新的列表/集合/字典/元组中的元素
- 对应于列表解析中的
i * 2
{}
意味着外部表达式的元素所存放的容器是集合容器
- 对应于列表解析中的
[]
,表示新生成的元素是列表中的元素