Python核心语法教程:列表推导式

Python中存在一种特殊的表达式,名为推导式,它的作用是将一种数据结构作为输入,再经过过滤计算等处理,最后输出另一种数据结构。根据数据结构的不同会被分为列表推导式、集合推导式和字典推导式。我们先着重来介绍最常使用的列表推导式。

我们先看一下列表推导式的语法格式:

1 listname  = [expression  for variable  in 对象( if condition)]

listname:新生成的列表名字

expression:表达式

variable:变量名

(if condition):用于从对象中选择符合要求的列表

我们分别从规定范围的数值列表、规定条件的列表和符合条件元素组成的列表三个方面讲起。

    1. 规定范围的数值列表

我们先思考一下当我们需要生成10个数字并存放列表当中,我们先看一下普通方式:

1234 listname  = [] for  in range ( 10 ):     listname.append(i) print (listname)

输出结果为:

1 [ 1 2 3 4 5 6 7 8 9 ]

而使用列表推导式只需要一行就可以:

1 listname  = [i  for  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  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  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  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  in listname  if i >  100 ] print (newlist)

输出结果:

1 [ 96.0 104.0 112.0 128.0 144.0 160.0 ]

我们来根据这个例子的语法结构来分析一下:

Python核心语法教程:列表推导式

在使用复杂的列表推导式的时候我们可以采用这种方式,可以理解为我们先把符合条件的元素(条件语句)从对象中挑选出来,然后再经过输出表达式的处理,最后存放到了列表当中,形成新的列表。

4. 例题

下面提供几道例题可以尝试着做一下。

1.列表[1,2,13,22,25],请使用使用列表推导式提取出大于10的数,并把每个数平方,最终输出。

运行结果为:

1 [ 169 484 625 ]

代码如下,可以先尝试做完参考答案。

123 list = [ 1 , 2 , 13 , 22 , 25 ] newlist  = [i  *  for  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  in list if i % 2 = = 1 ] print (newlist)

输出结果为:

1 [ 1 3 5 7 9 ]