Python序列(2):元组与生成器推导式

Python之元组与生成器推导式

1. 元组

1.1 创建元组

# 直接把一个元组赋值给一个变量
>>> number = (1,2,3,4,5,6)
>>> number
(1, 2, 3, 4, 5, 6)

# 查看变量类型
>>> type(number)
<class 'tuple'>

# 建立空元组
>>> number = ()
>>> number
()

>>> number = tuple()
>>> number
()

# 将其他迭代对象转换为元组
>>> number = tuple(range(9))
>>> number
(0, 1, 2, 3, 4, 5, 6, 7, 8)

元组属于不可变序列,没有任何方法可以修改元组中元素的值,但是如果元组中包括可变序列,有如下情况:

# 元组中包含列表
>>> data = ([5,2,1],233)
>>> data[0][2]
1

# 修改元组中的列表元素
>>> data[0][2] = 1024
>>> data
([5, 2, 1024], 233)

# 为元组中的列表添加元素
>>> data[0].append(666)
>>> data
([5, 2, 1024, 666], 233)

# 无法修改元组的值
>>> data[0] = 1024

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

2. 生成器推导式

生成器推导式的结果是一个生成器对象,当所有元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。

# 创建生成器对象
>>> number = ((i+1)**3 for i in range(10))
>>> number
<generator object <genexpr> at 0x000002114B3D9510>

# 将生成器转换为元组
>>> tuple(number)
(1, 8, 27, 64, 125, 216, 343, 512, 729, 1000)

# 生成器已经遍历结束,没有元素了
>>> list(number)
[]

# 使用生成器对象的__next__()方法获取下一个元素
>>> number = ((i+1)**3 for i in range(10))
>>> number.__next__()
1
>>> number.__next__()
8
>>> number.__next__()
27
>>> number.__next__()
64

# 使用内置函数next()获取生成器对象中的元素
>>> next(number)
125
>>> next(number)
216
>>> next(number)
343
>>> next(number)
512

# 使用循环遍历生成器对象中的元素
number = ((i+1)**3 for i in range(10))
for item in number:
	print(item,end = ' ')

1 8 27 64 125 216 343 512 729 1000

生成器对象具有惰性求值的特点,只有需要时返回元素,比列表推导式效率更高,适合大量数据的遍历。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值