Python核心语法教程:列表推导式
Python中存在一种特殊的表达式,名为推导式,它的作用是将一种数据结构作为输入,再经过过滤计算等处理,最后输出另一种数据结构。根据数据结构的不同会被分为列表推导式、集合推导式和字典推导式。我们先着重来介绍最常使用的列表推导式。
我们先看一下列表推导式的语法格式:
1 | listname
= [expression
for variable
in 对象(
if condition)] |
listname:新生成的列表名字
expression:表达式
variable:变量名
(if condition):用于从对象中选择符合要求的列表
我们分别从规定范围的数值列表、规定条件的列表和符合条件元素组成的列表三个方面讲起。
1. 规定范围的数值列表
我们先思考一下当我们需要生成10个数字并存放列表当中,我们先看一下普通方式:
1234 | listname
= []
for i
in range
(
10
):
listname.append(i)
print
(listname) |
输出结果为:
1 | [
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
] |
而使用列表推导式只需要一行就可以:
1 | listname
= [i
for i
in range
(
10
)] |
输出结果为:
1 | [
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
] |
这种方式能简化我们在定义列表时的操作。
2. 根据规定条件生成列表
假定我们已知一个列表为 listname = [1,3,5,6,7,9,10,23,26,28,64,98],我们要找到其把里面的数全部加5,普通方法:
1234 | listname
= [
1
,
3
,
5
,
6
,
7
,
9
,
10
,
23
,
26
,
28
,
64
,
98
]
for i
in range
(
len
(listname)):
listname[i]
+
= 5
print
(listname) |
输出结果为:
1 | [
6
,
8
,
10
,
11
,
12
,
14
,
15
,
28
,
31
,
33
,
69
,
103
] |
而使用列表推导式同样很简洁:
12 | listname
= [
1
,
3
,
5
,
6
,
7
,
9
,
10
,
23
,
26
,
28
,
64
,
98
]
listname
= [ i
+ 5 for i
in listname] |
输出:
1 | [
6
,
8
,
10
,
11
,
12
,
14
,
15
,
28
,
31
,
33
,
69
,
103
] |
3. 符合条件的元素组成的列表
这种类型的列表推导式要比前两种复杂点,但是能简化更多的代码。
我们先举个列子来看一下代码格式:
已知一个列表为listname = [8,33,53,64,73,95,101,123,126,164,198],然后我们要找到列表中小于大于100的数字,然后乘上0.8,最后返回到列表中。
如果我们使用普通方法:
1234567 | listname
= [
10
,
20
,
30
,
40
,
60
,
120
,
130
,
140
,
160
,
180
,
200
]
newlist
= []
#创建新列表来存储
for i
in range
(
len
(listname)):
#索引值遍历
if listname[i] >
100
:
#找到大于100的数
listname[i]
*
= 0.8
#乘上0.8
newlist.append(listname[i])
#添加到新列表中
print
(newlist) |
输出结果为:
1 | [
96.0
,
104.0
,
112.0
,
128.0
,
144.0
,
160.0
] |
使用列表推导式:
123 | listname
= [
10
,
20
,
30
,
40
,
60
,
120
,
130
,
140
,
160
,
180
,
200
]
newlist
= [i
*
0.8 for i
in listname
if i >
100
]
print
(newlist) |
输出结果:
1 | [
96.0
,
104.0
,
112.0
,
128.0
,
144.0
,
160.0
] |
我们来根据这个例子的语法结构来分析一下:
在使用复杂的列表推导式的时候我们可以采用这种方式,可以理解为我们先把符合条件的元素(条件语句)从对象中挑选出来,然后再经过输出表达式的处理,最后存放到了列表当中,形成新的列表。
4. 例题
下面提供几道例题可以尝试着做一下。
1.列表[1,2,13,22,25],请使用使用列表推导式提取出大于10的数,并把每个数平方,最终输出。
运行结果为:
1 | [
169
,
484
,
625
] |
代码如下,可以先尝试做完参考答案。
123 | list = [
1
,
2
,
13
,
22
,
25
]
newlist
= [i
* i
for i
in list if i >
10
]
print
(newlist) |
2.列表推导式求列表所有奇数并构造新列表,list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
代码如下:
123 | list = [
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]
newlist
= [i
for i
in list if i
%
2 =
=
1
]
print
(newlist) |
输出结果为:
1 | [
1
,
3
,
5
,
7
,
9
] |