Python合集之Python元组(三)

     在上一节的合集中,我们了解了Python的元组 中元素的访问及修改的相关知识,本节我们将进一步了解一下Python元组的推导式的相关知识。

1.元组推导式

使用元组推导式可以快速生成一个元组,他的表现形式与列表推导式类似,只是将列表推导式中使用 [] 修改为 () 。

例如:我们使用下面的代码生成一个包含10个随机数的元组。

import random
randomunmber=(random.randint(10,100) for i in range(10))
print("生成的元组为:",randomnumber)
执行的结果为:
生成的元组为:<generator object <genexpr> at ox0000000003056620>

从上面的例子中可以看出,使用元组推导式生成的结果并不是一个元组或者列表,而是一个生成器对象,这一点和列表推导式是不同的,要是用该生成器将其转换为元组或者列表。其中转换为元组使用tuple()函数,而转换为列表使用list()函数。

例如:使用元组推导式生成一个包含10个随机数的生成器对象,然后将其转换为元组并输出,可以使用下面的代码实现:

import random
randomnumber=(random.randint(10,100) for i in range(10))
randomnumber=tuple(randomnumber)
print("转换后:",randomnumber)
执行后的结果为:
转换后:(76,54,74,63,61,71,53,75,61,55)

要使用通过元组推导器生成的生成器对象,还可以通过for循环遍历或者直接使用__next__()方法进行遍历。

注:在Python2.X中__next__()方法对应的方法为next()方法,也是用于遍历生成器对象的

例如:通过生成器推导式生成一个包含3个元素的生成器对象number,然后调用3次__next__()方法输出每个元素的值,再将生成器对象number转换为元组输出,代码如下

number=(i for i in range(3))
print(number.__next__())
print(number.__next__())
print(number.__next__())
number=tuple(number)
print("转换后:",number)
执行结果如下:
0
1
2
转换后:()

通过生成器推导式生成一个包含4个元素的生成器对象number,然后应用for循环遍历该生成器对象,并输出每一个元素的值,最后将其转换为元组输出,代码如下:

number=(i for i in range(4))
for i in number :
    print(i,end=" ")
print(tuple(number))
执行结果如下:
0 1 2 3 ()

从上面的示例中可以看出,无论通过哪种方法遍历,如果再想使用该生成器兑现,都必须重新创建一个生成器对象,因为遍历后原生成器对象已经不存在了。

2.元组与列表的区别

元组和列表都属于序列,而且他们又都可以按照特定的顺序存放一组元素,类型不受限制,只要是Python支持的类型都可以,那么他们之间的区别是什么呢?

列表与元组的区别主要有以下几个方面:

  1. 列表属于可变序列,他的元素随时可以修改或者删除,元组属于不可变序列,其中元素不可以修改,除非整体替换。
  2. 列表可以使用append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而元组没有这几个方法,所以不能向元组中添加和修改元素,同样元组也不能删除元素。
  3. 列表可以使用切片访问和修改元素,元组也支持切片,但是他只支持通过切片访问元组中的元素,不可以修改。
  4. 元组比列表的访问和处理速度快,所以当只是需要对其中元素进行访问,而不进行任何修改时,建议采用元组。
  5. 列表不能作为字典的键,而元组可以。

花絮:

本期的Python 元组推导式及与列表的区别就分享到这里,下期我们将继续分享Python字典的相关知识,感兴趣的朋友可以关注我。

同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。

 

posted @ 2021-01-18 22:34  @睦  阅读(189)  评论(0编辑  收藏  举报