推导式可以分为:
1. 列表推导式
2. 字典推导式
3. 集合推导式
1. 列表推导式
形式:[ ]
例子1:
lis = [ i**2 for i in range(10) ]
print(lis)
输出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
解析:
先执行 for i in range(10) 取每一个 i 的值,然后执行 i**2,把i**2运算后的值存入列表中
例子2:
lis = [i**2 for i in range(10) if i % 2 == 0]
print(lis)
输出:
[0, 4, 16, 36, 64]
解析:
先执行 for i in range(10) 取每一个 i 的值,然后进行判断语句 if i % 2 == 0,判断值为真,执行i**2,把i**2的值存入列表
例子3: 推导式中双(多)重循环
lis = [a+b for a in "123" for b in "cde"]
print(lis)
输出:
['1c', '1d', '1e', '2c', '2d', '2e', '3c', '3d', '3e']
2. 字典推导式
字典推导式与列表推导式大致相同,不同在于列表使用中括号 [ ],字典使用大括号{ }
例子:
dic = {i : i**2 for i in range(5)}
print(dic)
print(type(dic))
输出:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
<class 'dict'>
3. 集合推导式
集合推导式与字典推导式十分相似,也是使用大括号 { }生成,但是其中形式有一定的差别。字典的形式是键值对,所以表现形式是 Key : Value,会多出一个 冒号 :。
例子:
Set = {i**2 for i in range(5)}
print(Set)
print(type(Set))
输出:
{0, 1, 4, 9, 16}
<class 'set'>
4. 元组是否也有推导式,()?
元组没有直接形式的推导式,使用 圆括号()是生成器的语法。
比如:
tup = (i for i in range(5))
print(tup)
print(type(tup))
输出:
<generator object <genexpr> at 0x000002B47C3F8570>
<class 'generator'>
当然如果要使用类似的方法生成元组推导式,需要调用元组类型转换函数 tuple( )。
比如:
tup = tuple((i for i in range(5)))
print(tup)
print(type(tup))
输出:
(0, 1, 2, 3, 4)
<class 'tuple'>
以上是推导式的基本使用。
思考题?
下面代码的运行结果:
代码1:
result = [lambda x: x+i for i in range(10)]
print(result[0](10))
结果是 ?
答案: 19
代码2:
result = [lambda x,y = i: x+y for i in range(10)]
print(result[0](10))
结果?
答案:10