11. Python 元组

154 阅读4分钟

开门见山,什么是元组?

  • 元组(tuple)是 Python 中另一个重要的序列结构。在形式上,元组的所有元素都放在一对()中,两个相邻元素间使用,分隔。在内容上,可以将 整数、实数、字符串、列表、元组等任何类型的内容放入到元祖中。通常情况下,元组用于保存程序中不可修改的内容。

  • 元祖的创建

    • 同其他类型的 Python 变量一样,创建元组时,也可以使用赋值运算符 = 直接将一个元组赋值给变量。语法格式如下:
    num = (7, 14, 21, 28, 35, 42, 49, 56, 63)
    
    • 在 Python 中,元组使用一对小括号将所有的元素括起来,但是小括号不是必须的,只要将一组值用逗号分隔开来,Python 就可以视其为元组。例如,下面的代码定义的也是元组:
    ukguzheng = '渔舟唱晚', '高山流水', '出水莲', '汉宫秋月'
    
    • 注意:可以使用 type() 函数测试变量的类型,如下面代码:
    verse1 = ('一片冰心在玉壶')
    print('verse1的类型为', type(verse1)) # <class 'str'>
    
    verse2 = ('一片冰心在玉壶',)
    print('verse2的类型为', type(verse2)) # <class 'tuple'>
    
  • 创建数值元组

    • 使用 tuple() 函数直接将 range()函数循环出来的结果转换为数值元组
    tuple(range(10, 20, 2)) # (10, 12, 14, 16, 18)
    
  • 删除元组

    • 对于删除创建的元组,不再使用时,可以使用 del 语句将其删除

    • 注意:del 语句在实际开发时,并不常用。因为 Python 自带的垃圾回收机制会自动销毁不用的元组,所以即使我们不手动将其删除,Python 也会自动将其回收

    verse = ('春眠不知晓', 'Python不得了', '夜来爬数据', '好评知多少')
    del verse
    
  • 访问元组元素

    • 可以通过元组的索引获取指定的元素
    untitle = ('Python', 28, ('人生苦短', '我用Python'), ['爬虫', '自动化运维', '云计算', 'Web开发'])
    print(untitle[0]) # Python
    
  • 使用切片获取

    • 切片操作时访问序列中元素的另一种方法,它可以访问一定范围的元素。通过切片操作可以生成一个新的序列。实现切片操作的语法格式如下:sname[start : end : step]

      • sname:表示序列的名称

      • start:表示切片的开始位置(包括该位置),如果不指定,则默认为0

      • end:表示切片的截止位置(不包括该位置),如果不指定,则默认序列的长度

      • step:表示切片的步长,如果省略,则默认为1,当省略该步长时,最后一个冒号也可以省略

      untitle = ('Python', 28, ('人生苦短', '我用Python'), ['爬虫', '自动化运维', '云计算', 'Web开发'])
      print(untitle[:3]) # ('Python', 28, ('人生苦短', '我用Python'))
      
  • 修改元组元素

    • 将元组内容相加
    ukguzheng = ('蓝山', '卡布奇诺', '曼特宁', '摩卡')
    ukguzheng = ukguzheng + ('麝香猫')
    
  • 元组推导式

    • 我们可以使用下面的代码生成一个包含10个随机数的元组
    import random # 导入random标准库
    random_number = (random.randint(10, 100) for i in range(10))
    print('生成的元组为:', randomnumber)
    
    # 执行结果如下:
    # 生成的元组为:
    # <generator object <genexpr> at 0x000001E5747AC510>
    # 可以看出使用元组推导式生成的结果并不是一个元组或者列表,而是一个生成器对象
    
    random_number = tuple(random_number)
    print('转换后', random_number)
    
    # 执行结果如下:
    # 生成的元组为:
    # (93, 76, 29, 65, 100, 77, 50, 65, 12, 71)
    

tips:元组与列表的区别

  • 列表属于可变序列,它的元素可以随时修改或者删除;元组属于不可变序列,其中的元素不可以修改,除非整体替换

  • 列表可以使用 append()、extend()、insert()、remove() 和 pop() 等方法实现添加和修改列表元素,而元组没有这几个方法,所以不能向元组中添加和修改元素。同样,元组也不能删除元素。

  • 列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。

  • 元组比列表的访问和处理速度快,所以当只是需要对其中的元素进行访问,而不进行任何修改时,建议使用元组。

  • 列表不能作为字典的键,而元组则可以。