购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3
元组

元组是Python中另一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成,但是它是不可变序列。在同一个元组中,元素的类型可以不同,因为它们之间没有任何关系。通常情况下,元组用于保存程序中不可修改的内容。

3.3.1 创建与删除元组

在Python中提供了多种创建元组的方法,下面进行详细介绍。

1.使用赋值运算符直接创建元组

同其他类型的Python变量一样,创建元组时也可以使用赋值运算符(=)直接将一个元组赋值给变量。语法格式如下:

    tuplename=(element1, element2, element3,..., elementn)

参数说明:

● tuplename:表示元组的名称,可以是任何符合Python命名规则的标识符。

● elemnet1,elemnet2,elemnet3,…,elemnetn:表示元组中的元素,元素个数没有限制,并且只要为Python支持的数据类型就可以。

注意

创建元组的语法与创建列表的语法类似,只是创建列表时使用的是“[]”,而创建元组时使用的是“()”。

在Python中,元组使用一对圆括号将所有的元素括起来,但是圆括号并不是必需的,只要将一组值用逗号分隔开来,Python就可以视其为元组。

【例3.29】创建一个包含4个元素的元组。

    ukguzheng="渔舟唱晚", "高山流水", "出水莲", "汉宫秋月"

在PyCharm中输出该元组后,得到的结果如下:

    ('渔舟唱晚', '高山流水', '出水莲', '汉宫秋月')

如果要创建的元组只包括一个元素,在定义元组时需要在元素的后面加一个逗号(,)。

2.创建空元组

在Python中,也可以创建空元组。

【例3.30】创建一个名称为emptytuple的空元组。

    emptytuple = ()
3.创建数值元组

在Python中,可以使用tuple()函数直接将range()函数循环出来的结果转换为数值元组。tuple()函数的语法格式如下:

    tuple(data)

参数说明:

● data表示可以转换为元组的数据,其类型可以是range对象、字符串、元组或者其他可迭代类型的数据。

提示

使用tuple()函数不仅能通过range对象创建元组,还可以通过其他对象创建元组。

【例3.31】创建一个数值元组。

代码如下:

    num = (7, 14, 21, 28, 35)
    course = ("Python教程", "http://c.biancheng.net/python/")
    abc = ( "Python", 19, [1,2], ('c',2.0) )

创建元组完成。

4.删除元组

对于已经创建的元组,当它不再被使用时,可以使用del语句删除,其语法格式如下:

    del tuplename

参数说明:

● tuplename:表示要删除元组的名称。

【例3.32】删除一个元组。

    num = (7, 14, 21, 28, 35)
    course = ("Python教程", "http://c.biancheng.net/python/")
    abc = ( "Python", 19, [1,2], ('c',2.0) )
    del num

即删除num元组成功。

3.3.2 访问元组元素

在Python中,如果想输出元组的内容也是比较简单的,直接使用print()函数即可。

【例3.33】使用print()函数输出元组的内容。

    untitle = ('Python', 28, ("人生苦短","我用Python"), ["爬虫","自动化运维",""云计
算","Web开发"])
    print(untitle)

执行结果如下:

    ('Python', 28, ('人生苦短', '我用Python'), ['爬虫', '自动化运维', '云计算', 'Web
开发'])

从执行结果可以看出,在输出元组时是包括圆括号的。

如果不想要输出全部的元素,也可以通过元组的索引获取指定的元素。

【例3.34】获取元组untitle中索引为0的元素。

    print(untitle[0])

执行结果如下:

    Python

元组也可以采用切片方式来获取指定的元素。

【例3.35】访问元组untitle中前3个元素。

    print(untitle[:3])

执行结果如下:

    (‘Python', 28,('人生苦短','我用Python'))

3.3.3 修改元组元素

元组是不可变序列,所以我们不能对它的单个元素值进行修改。但是元组也不是完全不能修改,我们可以对元组进行重新赋值以此来修改元组元素。

下面的代码是被允许的。

    coffeename = ('蓝山', '卡布奇诺', '曼特宁', '摩卡', '麝香猫', '哥伦比亚')  # 定义
元组
    coffeename = ('蓝山', '卡布奇诺', '曼特宁', '摩卡', '拿铁', '哥伦比亚')  # 对元组
进行重新赋值
    print("新元组", coffeename)

执行结果如下:

    新元组 ('蓝山', '卡布奇诺', '曼特宁', '摩卡', '拿铁', '哥伦比亚')

从上面的执行结果可以看出,元组coffeename的值已经发生了改变。

3.3.4 元组推导式

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

【例3.36】生成一个包含10个随机数的元组。

       import random
    randomnumber = (random.randint(10, 100) for i in range(10))
    print("生成的元组为:", randomnumber)

执行结果如下:

    生成的元组为:<generator object <genexpr> at 0x10581e678>

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

【例3.37】使用元组推导式生成一个包含10个随机数的生成器对象,然后将其转换为元组并输出。

    import random
    randomnumber = (random.randint(10, 100) for i in range(10))
    randomnumber = tuple(randomnumber)
    print("转换后:", randomnumber)

执行结果如下:

    转换后: (52, 36, 81, 70, 86, 58, 90, 26, 86, 95)

要使用通过元组推导器生成的生成器对象,除了将其转换为元组外,还可以直接通过for循环遍历或者直接使用方法进行遍历。

3.3.5 元组和列表的区别

元组和列表之间有什么区别呢?

列表和元组的区别主要体现在以下几个方面:

● 列表属于可变序列,它的元素可以随时修改或者删除。元组属于不可变序列,其中的元素不可以修改,除非重新赋值整体替换。

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

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

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

● 列表不能作为字典的键,而元组则可以。 6VgPHnQgPH2oNob8u3pE2DI2f/DNAfXHySe2wjSqGcKXNFWO3hO8ftfBLe+kuC9W

点击中间区域
呼出菜单
上一章
目录
下一章
×