列表在定义时是将元素放在中括号内,元组的定义则是将元素放在小括号 “()”内,下列是元组的语法格式。
name_tuple = ( 元素 1,…,元素 n ) #name_tuple 是假设的元组名称基本上元组的每一个数据称元素,元素可以是整数、字符串或列表等,这些元素放在小括号()内,彼此用逗号 “,” 隔开。如果要打印元组内容,可以用 print() 函数,将元组名称当作变量名称即可。
如果元组内的元素只有一个,在定义时需在元素右边加上逗号“,”。
name_tuple = ( 元素1 , ) #只有一个元素的元组例:定义与打印元组,最后使用 type() 列出元组数据类型
numbers1 = (1,2,3,4,5) # 定义元组元素是整数 fruits = ('apple','orange') # 定义元组元素是字符串 mixed = ('James',50) # 定义元组元素是不同类型数据 val_tuple =(10,) # 只有一个元素的元组 print(numbers1) print(fruits) print(mixed) print(val_tuple) print("元组mixed的数据类型是",type(mixed)) #输出结果 (1, 2, 3, 4, 5) ('apple', 'orange') ('James', 50) (10,) 元组mixed的数据类型是 <class 'tuple'>定义元组时是使用小括号 “()”,如果想要读取元组内容,和列表是一样的,用中括号 “ [ ] ”。在 python 中元组元素是从索引值 0 开始配置,所以如果是元组的第一个元素,索引值是 0,第二个元素索引值是 1,其他依次类推,如下所示:
numbers1 = (1,2,3,4,5) # 定义元组元素是整数 fruits = ('apple','orange') # 定义元组元素是字符串 val_tuple =(10,) # 只有一个元素的元组 print(numbers1[0]) print(numbers1[4]) print(fruits[0]) print(fruits[1]) print(val_tuple[0]) #输出结果 1 5 apple orange 10在 python 可以使用 for 循环遍历所有元组元素。
例:假设元组是由字符串和数值组成的密码,这个程序会列出元组所有元素内容。
keys = ('magic','xaab',9099) #定义元组元素是字符串与数字 for key in keys: print(key) #输出结果 magic xaab 9099本章前言笔者已经说明元组元素内容是不可更改的,下列是尝试更改元组元素内容的错误实例。
例:修改元组内容产生错误的实例。
fruits = ('apple','orange') print(fruits[0]) fruits[0] = 'watermelon' print(fruits[0]) #输出结果 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-82516c059142> in <module> 1 fruits = ('apple','orange') 2 print(fruits[0]) ----> 3 fruits[0] = 'watermelon' 4 print(fruits[0]) TypeError: 'tuple' object does not support item assignment 上述最后一行错误信息 TypeError 指出 tuple 对象不支技赋值,相当于不可更改它的元素值。如果我们想修改元组元素,可以使用重新定义元组方式处理。
例:用重新定义方式修改元组元素内容。
fruits = ('apple','orange') #定义元组元素是水果 print('原始 fruits 元组元素') for fruit in fruits: print(fruit) fruits = ('watermelon','grape') #定义新的元组元素 print('\n新的 fruits 元组元素') for fruit in fruits: print(fruit) #输出结果 原始 fruits 元组元素 apple orange 新的 fruits 元组元素 watermelon grape元组切片观念与 6-1-3 节列表切片观念相同,下列将直接用程序实例说明
例:元组切片的应用
fruits = ('apple','orange','banana','watermelon','grape') print(fruits[1:3]) print(fruits[:2]) print(fruits[1:]) print(fruits[-2:]) print(fruits[0:5:2]) #输出结果 ('orange', 'banana') ('apple', 'orange') ('orange', 'banana', 'watermelon', 'grape') ('watermelon', 'grape') ('apple', 'banana', 'grape')应用在列表上的方法或函数如果不会更改元组内容,则可以将它应用在元组,如 len()。如果会更改元组内容,则不可以将它应用在元组,如 append()、insert() 或 pop()。
例:列出元组元素长度(个数)。
keys = ('magic','xaab',9909) key = keys.pop() #输出结果 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-8-d89480eea8e8> in <module> 1 keys = ('magic','xaab',9909) ----> 2 key = keys.pop() AttributeError: 'tuple' object has no attribute 'pop' 上述指出错误是不支持 pop(),这是因为 pop() 将造成元组元素减少。例:误用会增加元组元素的方法 append(),产生错误的实例。
keys = ('magic','xaab',9909) keys.append('secret') #输出结果 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-9-5af41be2664c> in <module> 1 keys = ('magic','xaab',9909) ----> 2 keys.append('secret') AttributeError: 'tuple' object has no attribute 'append'程序设计过程,也许会有需要将列表与元组数据类型互换,可以使用下列指令。
list():将元组数据类型改为列表tuple():将列表数据类型改为元组例:将元组改为列表的测试
keys = ('magic','xaab',9909) list_keys = list(keys) list_keys.append('secret') print("打印元组 ",keys) print("打印列表 ",list_keys) #输出结果 打印元组 ('magic', 'xaab', 9909) 打印列表 ['magic', 'xaab', 9909, 'secret'] 上述第 4 行由于 list_keys 已经是列表,所以可以使用 append() 方法。例:将列表改为元组的测试。
keys = ['magic','xaab',9909] tuple_keys = tuple(keys) print("打印列表 ",keys) print("打印元组 ",tuple_keys) tuple_keys.append('secret') #输出结果 打印列表 ['magic', 'xaab', 9909] 打印元组 ('magic', 'xaab', 9909) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-12-631b3dc822f2> in <module> 3 print("打印列表 ",keys) 4 print("打印元组 ",tuple_keys) ----> 5 tuple_keys.append('secret') AttributeError: 'tuple' object has no attribute 'append' 上述前 5 行程序是正确的,所以可以看到有分别打印列表和元组元素,程序第 6 行的错误是因为 tuple_keys 是元组,不支持使用 append() 增加元素。例:元组内建方法 max()、min() 的应用。
tup = (1,3,5,7,9) print("tup 最大的值是",max(tup)) print("tup 最小的值是",min(tup)) #输出结果 tup 最大的值是 9 tup 最小的值是 1在 6 - 11 与 7 - 5 节皆已有说明,在此笔者直接以实例解说。
例:将元组转成 enumerate 对象,再转回元组对象
drinks = ("coffee","tea","wine") enumerate_drinks = enumerate(drinks) # 数值初始是 0 print("转成元组输出,初始值是 0 :",tuple(enumerate_drinks)) enumerate_drinks = enumerate(drinks,start = 10) # 数值初始是 10 print("转成元组输出,初始值是 10 :",tuple(enumerate_drinks)) #输出结果 转成元组输出,初始值是 0 : ((0, 'coffee'), (1, 'tea'), (2, 'wine')) 转成元组输出,初始值是 10 : ((10, 'coffee'), (11, 'tea'), (12, 'wine'))这是一个内置函数,参数内容主要是可迭代的对象,如列表等,然后将相对应的元素打包成元组,最后传给 zip 对象,我们可以使用 list() 函数将 zip 对象转成列表。
例:zip() 的应用
fields = ['Name','Age','Hometown'] info = ['peter','30','Chicago'] zipData = zip(fields,info) print(type(zipData)) player = list(zipData) print(player) #输出结果 <class 'zip'> [('Name', 'peter'), ('Age', '30'), ('Hometown', 'Chicago')]如果放在 zip() 函数的列表参数长度不相等,由于多出的元素无法匹配,转成列表对象后 zip 对象元素数量将是较短的数量。
例:fields 列表元素数量个数是 3 个,info 列表元素数量个数只有 2 个,最后 zip 对象元素数量是 2 个
fields = ['Name','Age','Hometown'] info = ['peter','30'] zipData = zip(fields,info) print(type(zipData)) player = list(zipData) print(player) #输出结果 <class 'zip'> [('Name', 'peter'), ('Age', '30')]如果在 zip() 函数内增加 " * " 符号,相当于可以 unzip() 列表。
例:扩充上面例子,恢复 zip 前的列表
fields = ['Name','Age','Hometown'] info = ['peter','30','Chicago'] zipData = zip(fields,info) print(type(zipData)) player = list(zipData) print(player) f,i = zip(*player) print("fileds:",f) print("info:",i) #输出结果 <class 'zip'> [('Name', 'peter'), ('Age', '30'), ('Hometown', 'Chicago')] fileds: ('Name', 'Age', 'Hometown') info: ('peter', '30', 'Chicago')