zoukankan      html  css  js  c++  java
  • 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字典的相关知识,感兴趣的朋友可以关注我。

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

  • 相关阅读:
    Code Reading chap2
    Code Reading chap4
    Code Reading chap6
    常用的一些sql基础语句汇总
    20170322、Linux常用命令汇总
    在windows上部署使用Redis
    20170322、php基础语法
    20170822、在Linux上部署使用Redis
    Linux安装配置SVN服务器
    Linux安装配置MySQL
  • 原文地址:https://www.cnblogs.com/a-mumu/p/14295593.html
Copyright © 2011-2022 走看看