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

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

  1. 元组不可以被改变,但是可以给元组名赋值,让它指向新的元组
>>>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 "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
  1. 可以删除整个元组
>>> x=(1, 2, 3)
>>> x
(1, 2, 3)
>>> del x
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
  1. 元组支持切片操作,但是不支持原地操作,即切片不能出现在赋值号的左边
>>> x=(1, 2, 3)
>>> y=x[0:2]
>>> y
(1, 2)
>>> x[0:2]=(4,5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> z={x:90, 2:91, 3:92} #列表作为字典的键值
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
  1. 生成器推导式

(1)生成器推导式的返回值是一个生成器对象

>>> x=(i for i in range(10))
>>> x
<generator object <genexpr> at 0x000002C2C6B43EC8>

(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等迭代器对象中

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python元组中的浮点数置为整数,您可以使用内置的round()函数或int()函数。 使用round()函数: 在Python中,round()函数可以用于对浮点数进行四舍五入。根据引用中的说明,Python 3中的round()函数遵循四舍六入五均分的规则。 您可以按如下方式将浮点数置为整数: ```python my_tuple = (2.5, 3.7, 4.9, 5.1) new_tuple = tuple(round(num) for num in my_tuple) ``` 在上面的代码中,我们使用了一个生成器表达式来遍历元组中的每个浮点数,并使用round()函数将其四舍五入为整数。然后,我们将这些整数转换回元组并赋值给new_tuple变量。这样,new_tuple中的每个浮点数都被置为了整数。 使用int()函数: 如果您只想将浮点数的小数部分去除,可以使用int()函数。int()函数可以将浮点数转换为整数,并且会截断小数部分。请注意,这不是四舍五入。 以下是使用int()函数将浮点数置为整数的示例代码: ```python my_tuple = (2.5, 3.7, 4.9, 5.1) new_tuple = tuple(int(num) for num in my_tuple) ``` 在上面的代码中,我们使用了一个生成器表达式来遍历元组中的每个浮点数,并使用int()函数将其转换为整数。然后,我们将这些整数转换回元组并赋值给new_tuple变量。 无论是使用round()函数还是int()函数,都可以将Python元组中的浮点数置为整数。具体选择哪种方法取决于您对浮点数如何进行转换的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值