元组是Python中另一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成,但是它是不可变序列。在同一个元组中,元素的类型可以不同,因为它们之间没有任何关系。通常情况下,元组用于保存程序中不可修改的内容。
在Python中提供了多种创建元组的方法,下面进行详细介绍。
同其他类型的Python变量一样,创建元组时也可以使用赋值运算符(=)直接将一个元组赋值给变量。语法格式如下:
tuplename=(element1, element2, element3,..., elementn)
参数说明:
● tuplename:表示元组的名称,可以是任何符合Python命名规则的标识符。
● elemnet1,elemnet2,elemnet3,…,elemnetn:表示元组中的元素,元素个数没有限制,并且只要为Python支持的数据类型就可以。
创建元组的语法与创建列表的语法类似,只是创建列表时使用的是“[]”,而创建元组时使用的是“()”。
在Python中,元组使用一对圆括号将所有的元素括起来,但是圆括号并不是必需的,只要将一组值用逗号分隔开来,Python就可以视其为元组。
【例3.29】创建一个包含4个元素的元组。
ukguzheng="渔舟唱晚", "高山流水", "出水莲", "汉宫秋月"
在PyCharm中输出该元组后,得到的结果如下:
('渔舟唱晚', '高山流水', '出水莲', '汉宫秋月')
如果要创建的元组只包括一个元素,在定义元组时需要在元素的后面加一个逗号(,)。
在Python中,也可以创建空元组。
【例3.30】创建一个名称为emptytuple的空元组。
emptytuple = ()
在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) )
创建元组完成。
对于已经创建的元组,当它不再被使用时,可以使用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元组成功。
在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'))
元组是不可变序列,所以我们不能对它的单个元素值进行修改。但是元组也不是完全不能修改,我们可以对元组进行重新赋值以此来修改元组元素。
下面的代码是被允许的。
coffeename = ('蓝山', '卡布奇诺', '曼特宁', '摩卡', '麝香猫', '哥伦比亚') # 定义 元组 coffeename = ('蓝山', '卡布奇诺', '曼特宁', '摩卡', '拿铁', '哥伦比亚') # 对元组 进行重新赋值 print("新元组", coffeename)
执行结果如下:
新元组 ('蓝山', '卡布奇诺', '曼特宁', '摩卡', '拿铁', '哥伦比亚')
从上面的执行结果可以看出,元组coffeename的值已经发生了改变。
使用元组推导式可以快速生成一个元组,它的表现形式和列表推导式类似,只是将列表推导式中的“[ ]”修改为“()”。
【例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循环遍历或者直接使用方法进行遍历。
元组和列表之间有什么区别呢?
列表和元组的区别主要体现在以下几个方面:
● 列表属于可变序列,它的元素可以随时修改或者删除。元组属于不可变序列,其中的元素不可以修改,除非重新赋值整体替换。
● 列表可以使用append()、extend()、insert()、remove()和pop()等方法添加和修改列表元素,而元组没有这几个方法,所以不能向元组中添加和修改元素。同样,元组也不能删除元素。
● 列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
● 元组比列表的访问和处理速度快,所以当只是需要对其中的元素进行访问而不进行任何修改时,建议使用元组。
● 列表不能作为字典的键,而元组则可以。