Python中的推导式

一、列表推导式

1.1 列表推导式介绍

Python中的 列表推导式 可以使用非常简洁的方法来 快速 生成满足特定需求的列表,代码具有非常强的可读性。另外Python的内部实现对列表推导式的 大量优化,可以保证 很快的运行速度

1.2 列表推导式语法

[表达式 for 变量 in 序列或迭代对象]

1.3 列表推导式案例

下面三段代码的结果是等价的

aList = [x*x for x in range(10)]
print(aList)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
aList = []
for x in range(10):
    aList.append(x * x)
print(aList)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
aList =list(map(lambda x: x * x ,range(10)))
print(aList)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

二、生成器推导式

2.1 生成器推导式介绍

生成器推导式的结果是一个 生成器对象 ,而不是列表,也不是元组。使用生成器对象的元素时,可以根据需要将其转化为列表或者元组,也可以使用生成器对象的__next__()方法或者内置函数 next()进行遍历,或者直接将其作为迭代器对象来使用。

2.2 生成器推导式语法

(表达式 for 变量 in 序列或迭代对象)

2.3 生成器推导式案例

1、查看生成器的类型

aTuple = (x*x for x in range(10))
print(aTuple)
print(type(aTuple))

<generator object <genexpr> at 0x000002056EC36B10>
<class 'generator'>

2、使用__next__() 方法 和 next() 函数进行打印值

aTuple = (x*x for x in range(10))
print(aTuple.__next__())
print(next(aTuple))

0
1

3、使用循环直接遍历生成器对象中的元素

aTuple = (x*x for x in range(10))
for i in aTuple:
    print(i,end="")
    print(" ")

0 
1 
4 
9 
16 
25 
36 
49 
64 
81

4、包含yield语句的函数可以用来创建可迭代的生成器对象

yield语句相当于return语句,但它返回一个生成器对象。

# 生成斐波那契数列
def fun(): # 序列解包,同时为多个元素赋值
    a,b = 1,1
    while True:
        yield a # 暂停执行,需要时再产生一个新元素
        a,b = b, a+b
        
a = fun() # 创建生成器对象
for i in range(10): 
    print(a.__next__(),end='')
    print()

1
1
2
3
5
8
13
21
34
55
2.4 注意事项

不管用哪种方法访问其元素,当所有元素访问结束以后,如果需要重新访问其中的元素,必须重新创建该生成器对象。

三、字典推导式

3.1 字典推导式介绍

字典推导式与上面两种推导式的作用有相似之处,都是加强代码的可读性,加快运行速度。

3.2 字典推导式语法

{表达式:表达式 for 变量,变量 in 序列或可迭代对象}

3.2 字典推导式案例

1、第一个案例

aDict = {i*i:str(i) for i in range(10)}
print(aDict)

{0: '0', 1: '1', 4: '2', 9: '3', 16: '4', 25: '5', 36: '6', 49: '7', 64: '8', 81: '9'}

2、第二个案例

x = [4,5,6,7]
y = ['1','2','3','4']
aDict = {i:j  for i,j in zip(x,y)}
print(aDict)

{4: '1', 5: '2', 6: '3', 7: '4'}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值