列表、集合、字典以及生成器都可以使用推导式来创建;
# 列表
res = [ord(x) for x in 'spaam']
# output >>> res
[115, 112, 97, 97, 109]
# 集合
res = {ord(x) for x in 'spaam'}
# output >>> res
{112, 97, 115, 109}
# 字典
res = {x: ord(x) for x in 'spaam'}
# output >>> res
{'s': 115, 'p': 112, 'a': 97, 'm': 109}
# 生成器
res = (ord(x) for x in 'spaam')
# output >>> res
<generator object <genexpr> at 0x0000025AEC10CC10>
推导公式
# 列表推导式
[<表达式> for <变量> in <可迭代对象> if <逻辑条件>]
# 字典推导式
{<键值表达式>:<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}
# 集合推导式
{<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}
# 生成器推导式
(<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>)
## 返回一个生成器对象,也是可迭代对象,但是生成器并不立即产生全部元素,仅在要用到元素的时候才生成,可以极大节省内存
列表推导式
列表推导式是写在一个方括号中,构建一个新的列表的方式;
在日常使用当中,使用列表推导式替代for循环语句可以提高执行效率;
简单的列表推导式
# 推导式形式
L = [1, 2, 3, 4, 5]
res = [i + 10 for i in L]
# for循环语句形式
res = []
for i in L:
res.append(i + 10)
# output >>> res
[11, 12, 13, 14, 15]
推导公式
[输出表达式 for 变量 in 输入序列]
嵌套循环(for)
两个不同的列表
# 推导式形式
res = [x + y for x in 'abc' for y in 'efg']
# for循环语句形式
res = []
for x in 'abc':
for y in 'efg':
res.append(x + y)
# output >>> res
['ae', 'af', 'ag', 'be', 'bf', 'bg', 'ce', 'cf', 'cg']
推导公式
[输出表达式 for 变量1 in 输入序列1 for 变量2 in 输入序列2]
一个列表
# 推导式形式
L = ['abcdef', 'gggg']
res = [print(i) for x in L for i in x]
# for循环语句形式
for x in L:
for i in x:
print(i)
# output >>>
a
b
c
d
e
f
g
g
g
g
推导公式
[输出表达式 for 变量1 in 输入序列 for 变量2 in 变量1]
for 与 if 组合
# 推导式形式
L = [1, 2, 3, 4, 5]
res = [i for i in L if i > 3]
# for循环与if分句组合形式
res = []
for i in L:
if i> 3:
res.append(i)
# output >>> res
[4, 5]
推导公式
[输出表达式 for 变量 in 输入序列 if 可选的判断表达式]
# 输出表达式,产生最终列表的元素
# 变量,表示输入序列里面的元素
# 输入序列
# 可选的判断表达式