本文基于python3。
你可以理解成一种数据的处理方式。目的是为了构建一个新的数据序列。
Python 支持各种数据结构的推导式:
各自从字面意思就知道,创建一个列表、字典、集合、元组。
我们本文只看列表(list)推导式。
列表推导式创建列表的方式更简洁。
常见的用法:
定义主要有两种:(该部分定义来自:菜鸟教程)
[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
总结:一个表达式,后面为一个 for 子句,然后跟着零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。
基于总结话我们来实际操作一下。
创建 数值*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)
创建 全是偶数 的列表:
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)
直接上实例,一看就懂:
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]
直接上实例:
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]
因为列表生成元素表达式,可以是有返回值的函数。因此就有一些其他用法。
OldList = [' AA', ' BB ', 'CC ']
TestList = [i.strip() for i in OldList]
# strip():去掉前后空格
print(TestList)
# ['AA', 'BB', 'CC']
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.py
File "d:/05.ProjectWork/00.Python/00.Project/test_python/test.py", line 192
TestList = [x, x**2 for x in range(6)]
^
SyntaxError: invalid syntax
from math import pi
TestList = [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']
直接上代码:
print("\n".join([" ".join(["{}*{}={}".format(x, y, x*y) for x in range(1,y+1)]) for y in range(1,10)]))
结果如下:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*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
其实我们看这些实例,他们的规律就是:
最前面的表达式就是最后这个值做了怎么样的处理。
后面的for、if语句,从左到右依次,一层一层嵌套进去,进行处理。
如果有问题,请指出,或者copy了谁的,也请指出。
会及时更正。