本文基于python3。

目录

  • 1、Python推导式
  • 2、列表(list)推导式
    • 2.1、定义
    • 2.2、实际操作
      • 2.2.1、一个表达式,后面为一个 for 子句
      • 2.2.2、一个表达式,后面为一个 for 子句,然后,跟着if 子句。
      • 2.2.3、一个表达式,后面为一个 for 子句,然后,跟着 for 子句。
      • 2.2.4、一个表达式,后面为一个 for 子句,然后,跟着 for 子句,if 语句
      • 2.2.5、表达式的不同
        • 2.2.5.1、表达式是函数
        • 2.2.5.2、表达式是元组
        • 2.2.5.2、表达式是复杂的表达式和嵌套函数
  • 3、利用列表推导式实现乘法口诀
  • 4、总结

1、Python推导式

你可以理解成一种数据的处理方式。目的是为了构建一个新的数据序列。
Python 支持各种数据结构的推导式:

  1. 列表(list)推导式
  2. 字典(dict)推导式
  3. 集合(set)推导式
  4. 元组(tuple)推导式

各自从字面意思就知道,创建一个列表、字典、集合、元组。
我们本文只看列表(list)推导式。

2、列表(list)推导式

列表推导式创建列表的方式更简洁。
常见的用法:

  1. 对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表。
  2. 用满足特定条件的元素创建子序列。

2.1、定义

定义主要有两种:(该部分定义来自:菜鸟教程)

  • 定义1:
[表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list]
  • 定义2
[表达式 for 变量 in 列表 if 条件][out_exp_res for out_exp in input_list if condition]
  • out_exp_res:列表生成元素表达式,可以是有返回值的函数。
  • for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
  • if condition:条件语句,可以过滤列表中不符合条件的值。

总结:一个表达式,后面为一个 for 子句,然后跟着零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。

基于总结话我们来实际操作一下。

2.2、实际操作

2.2.1、一个表达式,后面为一个 for 子句

创建 数值*2 的列表:

TestList = [x*2 for x in range(10)]print(TestList)# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

等价于以下语句:

TestList = []for x in range(10):TestList.append(x*2)print(TestList)

2.2.2、一个表达式,后面为一个 for 子句,然后,跟着if 子句。

创建 全是偶数 的列表:

TestList = [i for i in range(10) if i % 2 == 0]print(TestList)# [0, 2, 4, 6, 8]

等价于以下语句:

TestList = []for i in range(10):if i % 2 == 0:TestList.append(i)print(TestList)

2.2.3、一个表达式,后面为一个 for 子句,然后,跟着 for 子句。

直接上实例,一看就懂:

OldList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]TestList = [j for i in OldList for j in i]print(TestList)# [1, 2, 3, 4, 5, 6, 7, 8, 9]

等价于以下语句:

OldList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]TestList = []for i in OldList:for j in i:TestList.append(j)print(TestList)# [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.2.4、一个表达式,后面为一个 for 子句,然后,跟着 for 子句,if 语句

直接上实例:

OldList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]TestList = [j for i in OldList for j in i if j % 2 == 0]print(TestList)# [2, 4, 6, 8]

等价于以下语句:

OldList = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]TestList = []for i in OldList:for j in i:if j % 2 == 0:TestList.append(j)print(TestList)# [2, 4, 6, 8]

2.2.5、表达式的不同

因为列表生成元素表达式,可以是有返回值的函数。因此就有一些其他用法。

2.2.5.1、表达式是函数
OldList = [' AA', 'BB ', 'CC']TestList = [i.strip() for i in OldList]# strip():去掉前后空格print(TestList)# ['AA', 'BB', 'CC']
2.2.5.2、表达式是元组
TestList = [(x, x**2) for x in range(6)]print(TestList)# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

注意:使用元组必须带小括号。

# 没带小括号TestList = [x, x**2 for x in range(6)]print(TestList)# 错误信息/Scripts/python.exe d:/05.ProjectWork/00.Python/00.Project/test_python/test.pyFile "d:/05.ProjectWork/00.Python/00.Project/test_python/test.py", line 192TestList = [x, x**2 for x in range(6)]^SyntaxError: invalid syntax
2.2.5.2、表达式是复杂的表达式和嵌套函数
from math import piTestList = [str(round(pi, i)) for i in range(1, 9)]print(TestList)# ['3.1', '3.14', '3.142', '3.1416', '3.14159', '3.141593', '3.1415927', '3.14159265']

3、利用列表推导式实现乘法口诀

直接上代码:

print("\n".join([" ".join(["{}*{}={}".format(x, y, x*y) for x in range(1,y+1)]) for y in range(1,10)]))

结果如下:

1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

4、总结

其实我们看这些实例,他们的规律就是:

最前面的表达式就是最后这个值做了怎么样的处理。
后面的for、if语句,从左到右依次,一层一层嵌套进去,进行处理。

如果有问题,请指出,或者copy了谁的,也请指出。
会及时更正。