python 元组
python 的元组与列表类似, 不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
元组创建只需要在括号中添加元素,并使用逗号隔开即可。
如例:
tup1 = ('Google','Runoob','1889','3990');
tup2 = (1,2,3,4,5);
tup3 = "a","b","c","d";
创建空元组:
tup1 = ();
元组只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
tup1 = (30) #不加逗号,类型为整型
print(type(tup1))
tup1 = (50,) #加上逗号,类型为元组
print(type(tup1))
#输出结果为:
<class 'int'>
<class 'tuple'>
元素与字符串类似,下标索引从0 开始,可以进行截取,组合等。
访问元组
元组可以使用下标索引来访问元组中的值,如下实例:tup1 = ('Google','Runoob','1889','3990');
tup2 = (1,2,3,4,5,6,7)
print ("tup1[0]:",tup1[0])
print ("tup2[1:5]:",tup2[1:5])
输出结果为:
tup1[0]: Google
tup2[1:5]: (2, 3, 4, 5)
修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如例:tup1 = (14,54,24)
tup2 = ('abc','xup')
#修改以下元组元素是非法的。
#tup1[0] = 100
#创建一个新的元组
tup3 = tup1 + tup2
print(tup3)
输出结果为:
(14, 54, 24, 'abc', 'xup')
删除元组
元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组,如例:tup = ('Google','Runoob','1889','3990');
print (tup)
del tup;
print ("删除后的元组 tup :")
print (tup)#删除后的元组,输出变量时有异常
#输出结果为:
# ('Google', 'Runoob', '1889', '3990')
#删除后的元组 tup :
# NameError: name 'tup' is not defined
元组运算符
列表对“+”和“*”的使用与字符串相似。+号用于组合列表,*号用于重复列表。如下:表达式: 结果: 描述:
len([1,2,3]) 3 长度
[1,2,3]+[4,5,6] [1,2,3,4,5,6,] 组合
['h1']*4 ['h1','h1','h1','h1',] 重复
3 in [1,2,3] True 元素是否存在于列表中
for x in [1,2,3]:print x, 1 2 3 迭代(所谓迭代,是按照一定顺序扫描列表的对象)
元组索引,截取
因为元组也是一个数列,所以可以访问元组数据中的指定位置的元素,也可以截取索引中的一段元素:L=['Google','Runoob','Taobao']操作:
表达式: 结果: 描述:
L[2] 'Taobao' 读取第三个元素
L[-2] 'Runoob' 从右侧开始读取倒数第二个元素(负数从右往左读取)
L[1: ] ['Runoob','Taobao'] 截取元素,输出从第二个元素开始后的所有元素
L=['Google','Runoob','Taobao']
print (L[2])
print (L[-2])
print (L[1:])
输出结果为:
Taobao
Runoob
['Runoob', 'Taobao']
元组内置函数
python 元组包含了以下内置函数:- len(tuple):计算元组元素的个数
tuple1 = ('Google','Runoob','Taobao')
print (len(tuple1))
#输出结果为:
3
- max(tuple):返回元组中元素最大值
tuple2 = ('3','6','8')
print (max(tuple2))
#输出结果为:
8
- min(tuple):返回元组中元素最小的值
tuple2 = ('3','6','8')
print (min(tuple2))
#输出结果为:
3
- tuple(seq):将列表转换为元组
list1=['Google','Runoob','Taobao','Baidu']
tuple1=tuple(list1);
print(tuple1)
#输出结果为:
('Google', 'Runoob', 'Taobao', 'Baidu')
----------------------------------------------------------------------------------------------
笔记:
tuple 和list非常相似,但是 tuple 一旦初始化就不能修改,比如同样列出同学名字:
如下:
classmates = ('Michael', 'Bob', 'Tracy')
现在 classmates这个 tuple 不能改变,它,没有append(), inset () 这样的方法。其它 获取元素的方法和list 是一样的,可以正常的使用 classmates[0],classmates[-1], 但是不能赋值成另外的元素。
tuple 不可变得意义:以为tuple 不可变,所有代码更安全,如果可能,能用tuple 代替list 就用tuple。
tuple 的陷阱:当定义一个tuple 时,在定义的时候,tuple 的元素 就必须给确定下来:比如:
t = (1,2)
print (t)
输出结果:
(1, 2)
如果定义一个空的tuple,则写成 ():
t = ()
print (t)
输出结果:
()
要定义一个只有1 的元素的 tuple 时,必须加逗号,如果不加:
t = (1)
print (t)
输出结果:
1
则定义的不是tuple,是1 这个数!这是因为括号()既可以表示tuple,又可以表示数学公式的小括号,易产生歧义,所以,只有 1 个元素(或者只显示一个元素时)的tuple定义时必须加一个逗号,消除歧义:
t = (1,)
print (t)
输出结果:
(1,)
看一个可变的tuple:
t = ('a','b',['A','B'])
t[2][0]='x'
t[2][1]='y'
print (t)
输出结果为:
('a', 'b', ['x', 'y'])
这个tuple定义的时候有三个元素,是‘a’,'b',和一个list。问题来了:tuple一旦定义之后就不会变,怎么变了么?
因为当我们把list 的元素;“A”和"B"修改为'X'何'Y'后,
tuple表面上看元素确实变了,但是变得并不是tuple的元素。tuple开始
指向的list并没有改变成别的list,所以,tuple所谓的“不变”是说tuple的每个元素,指向永远不变。即指向:“a”,就不能改向“b”,指向一个list,就不能指向其他对象,但是《指向这个list的对象本身是可变的》,理解“指向不变”后,要创建一个内容也不变的tuple时,必须保证tuple本身的每一个元素都不能变。
----------------------------------------------------------------------------------------------
tuple元素不可变有一种特殊的情况,当元素是课变对象时,对象内部的属性是可以更改的,tuple不可变是指限制在一个维度上:元素的类型。实现理解,tuple的元素所保存的内容(数值或内存地址)是不允许修改的,但是地址映射的对象自身是可以修改的。
a = (1,[3,2])
a [1][0]=1
print (a)
a[1].append(3)
print (a)
del a[1][2]
print (a)
del a[1]
print (a)#产生异常
del a[1][1]
del a[1][0]
print (a)
输出结果为:
(1, [1, 2])
(1, [1, 2, 3])
(1, [1, 2])
TypeError: 'tuple' object doesn't support item deletion(报错)
(1, [])
字符串是一种特殊的 tuple,支持tuple的运算符:
a = '123456'
print (a[2])
print (a[3:])
print (type(a))
print (a*2)
# 6 in a#报错
print (a)
for x in a:print (x)
输出结果为:
3
456
<class 'str'>
123456123456
123456
TypeError: 'in <string>' requires string as left operand, not int
1
2
3
4
5
6