python元组的基本用法及生成器对象 | 您所在的位置:网站首页 › 元组可以作为元组的元素吗对吗 › python元组的基本用法及生成器对象 |
python元组的基本用法及生成器对象
元组不可以被改变,但是可以给元组名赋值,让它指向新的元组
>>>x=(1,2,3)
>>> x
(1, 2, 3)
>>> x=(4,5,6)
>>> x
(4, 5, 6)
>>> x[0]=4
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment
可以删除整个元组
>>> x=(1, 2, 3)
>>> x
(1, 2, 3)
>>> del x
>>> x
Traceback (most recent call last):
File "", line 1, in
NameError: name 'x' is not defined
元组支持切片操作,但是不支持原地操作,即切片不能出现在赋值号的左边
>>> x=(1, 2, 3)
>>> y=x[0:2]
>>> y
(1, 2)
>>> x[0:2]=(4,5)
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment
4.列表和元组的不同点: (1)列表能进行修改,因此可以使得数据更安全。 python对元组的内部做了大量的优化,所以元组的访问速度要比列表快。 基于以上两点原因,我们在不需要改变数据的情况下,仅仅是做一些遍历等操作时,我们一般选择元组而不是列表。 (2)元组可以作为字典的键值、集合的元组,但是列表不可以,因为python要求字典的键值和集合的元素始终可哈希 >>> x=(1,2,3) >>> y={x,1,2} #元组作为集合的元素 >>> y {1, 2, (1, 2, 3)} >>> z={x:90, 2:91, 3:92} #元组作为字典的键值 >>> z {(1, 2, 3): 90, 2: 91, 3: 9} >>>x=[1,2,3] >>> y={x,1,2} #列表作为集合的元素 Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: 'list' >>> z={x:90, 2:91, 3:92} #列表作为字典的键值 Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: 'list' 生成器推导式(1)生成器推导式的返回值是一个生成器对象 >>> x=(i for i in range(10)) >>> x(2)这与列表推导式有很大不同,列表推导式的结果是列表 >>> x = [i for i in range(10)] >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9](3)使用生成器对象的元素时,可以将生成器对象转换成列表或元组 >>> x = (i for i in range(10)) >>> y = tuple(x) >>> y (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) >>> z = tuple(x) >>> z () >>> w = list(x) >>> w []代码中z元组是个空元组,w是个空列表,这是因为之前得到y元组的过程中已经对生成器对象x进行了遍历的访问,访问一个删除一个,所以后面想再使用x时,x已经空了 (4)还可以使用生成器对象的_ next () _ 方法或者python内置函数next()来对生成器对象进行遍历(下面将x转换成的列表说明了生成器对象访问过的元素会被删除) >>> x = (i for i in range(10)) >>> x.__next__() 0 >>> x.__next__() 1 >>> x.__next__() 2 >>> next(x) 3 >>> next(x) 4 >>> list(x) [5, 6, 7, 8, 9](5)使用for循环遍历生成器对象中的元素 >>> x = (i for i in range(10)) >>> for item in x: ... print(item,end=' ') ... 0 1 2 3 4 5 6 7 8 9(6)一个有趣的例子 >>> x = map(str,range(20)) >>> '2' in x True >>> '2' in x #此时x有 '3','4','5','6',...,'19' 所以此表达式结果为False False >>> '8' in x #此时x为空(为了在 '3'到 '19'中寻找'2',把整个生成器对象全部遍历,所以此时生成器是空的) False“访问过的元素就删除” 这样的特点也存在于enumerate、filter、map、zip等迭代器对象中 |
CopyRight 2018-2019 实验室设备网 版权所有 |