python元组的基本用法及生成器对象 您所在的位置:网站首页 元组可以作为元组的元素吗对吗 python元组的基本用法及生成器对象

python元组的基本用法及生成器对象

2024-06-26 16:24| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有