3.2 元组
3.2.1 元组创建与元素访问(详见p59)
如果元组中只有一个元素,则必须在最后增加一个逗号
3.2.2 元组与列表的异同点
- 相同:
- 列表和元组都属于有序序列,都支持使用双向索引访问其中元素
- 支持count()、index()、len()、map()、filter()等内置函数
- 支持+、*、+=、in等运算符
- 不同:
- 元组属于不可变序列,不可以直接修改元组中元素的值,也无法为元组增加或删除元素
- 不支持append()、extend()、insert()、remove()、pop()等方法
- 对于del操作,仅支持使用del删除整个元组
- 对于切片操作,只能通过切片来访问元组中的元素
3.2.3 生成推导式
- 生成器推导式的结果是一个生成器对象
- 对于生成器对象的元素的访问,只能从前往后正向访问其中的元素,没有任何方法可以再次访问以访问过的元素,也不支持使用下标访问其中的元素
g = ((i+2)**2 for i in range(10))
print(g)
print(type(g))
print(tuple(g)) #将生成器对象转换为元组
print(list(g)) #生成器对象已遍历结束,没有元素了
<generator object <genexpr> at 0x000001FDB2D1C930>
<class 'generator'>
(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)
[]
g = ((i+2)**2 for i in range(10))
print(g.__next__()) #使用生成器对象__next__()方法获取元素
print(g.__next__()) #获取下一个元素
print(next(g))
4
9
16
x = filter(None,range(20)) #filter对象也具有类似的特点
print(1 in x)
print(5 in x)
print(2 in x) #返回结果为False,因为已经访问到"5"了,而"2"在"5"之前,向后遍历没有"2"
True
True
False
x = map(str,range(20)) #map对象也具有类似的特点
print('0' in x)
print('0' in x)
True
False