推导表达式

列表、集合、字典以及生成器都可以使用推导式来创建;

# 列表
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 可选的判断表达式]
# 输出表达式,产生最终列表的元素
# 变量,表示输入序列里面的元素
# 输入序列
# 可选的判断表达式