-
【笔记】
Python
之解析式详解
目录
1.
2.
3.
4.
解析式的简单介绍
列表解析式
字典解析式
集合解析式
1
、解析式简单介绍
推导式:
Comprehensions
(又称解析式),是
Pytho
n
的一种独有特性。推导式是可以
从一个数据序列构建另一个新
的数据序列的结构体。
共有三种推导,在
Python2
和
3
中都
有支持:
a.
列表解析
# Python2
只有列表解析
b.
生成器解析
# Python3
特有
c.
集合解析
#
Python3
特有
d.
字典解析
# Python3
特有
解析式的作用:
a.
修改可迭代对象
b.
过滤可迭代对象
2
、列表解析式
列表解析的一般形式:
[expression
for
item
in
iterable]
#[
表达式
for
元素
可迭代对象
]
接下来看几个示例:
In[23]
:
[2 ** n
for n in range(10)]
Out[23]
:
[1, 2, 4, 8, 16, 32,
64,
128, 256, 512]
In[
24
]:
def
inc
(x)
:
...:
return
x +
1
...:
In[
25
]: [inc(x)
for
x
in
range(
10
)]
Out[
25
]:
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]
In[
26
]:
[
0
for
x
in
range(
10
)]
Out[
26
]:
[
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
]
In[
27
]:
def
non_return
(x)
:
...:
pass
...:
In[
28
]:
[non_return(x)
for
x
in
range(
10
)]
Out[
28
]:
[
None
,
None
,
None
,
None
,
None
,
None
,
None
,
None
,
None
,
None
]
列表解析式返回的结果是列表,列表的内容是表达式执行的结
果。接着看例子:
In[
13
]: [x
for
x
in
range(
10
)
if
x %
2
==
0
]
Out[
13
]:
[
0
,
2
,
4
,
6
,
8
]
#
上面的语句等效于
ret =
[]
for
x
in
range(
10
):
if
x %
2
==
0
:
(x)
可以使用
python
的
timeit
来测试两种方式的执行效率。
会发现列表解析的执行效率会
p>
好一些
,
优势显而易见。
< br>
#
!
/usr/bin/env
python# -*- coding: utf-8 -*-# Created by Xi on
2019-02-21
import
timeit
list =[]
def
fun
()
:
for
i
in
range(
100
):
if
i%
2
==
0
:
(i)
n
=
1000000
if
__name__ ==
'__main__'
:
print((stmt=fun,number=n))
print((stmt=
x
%2==0]
,number=n))
输出结果:
7.920102399
999999
4.72995
如果列表解析式中有
if
关键字呢:
[expression
for
item
in
iterable
if
condition]
#[
表达式
for
元素
in
可迭
代对象
if
条件语句
]
#
等价于
ret =
[]
for
item
in
iterable:
if
condition:
ret.
append
(exper)
以上介绍的只带了一个
if
关键字,如
果有多个
if
关键字呢:
[experessi on
for
item
in
iterable
if
condition1
if
condition2]
#
等价于
ret =
[]
for
item
in
iterable:
if
condition1:
if
condition2:
(experession)
针对上面来个例子:
[
x
for x in
range(
10
) if x %
2
==
0
if x >
1
][
2
,
4
,
6
,
8
]
-
-
-
-
-
-
-
-
-
上一篇:一般学术论文尾注参考文献的录入格式与要求
下一篇:懂你英语LUnit