元组的定义:元组是有序的,不可修改的,以逗号分隔的,以小括号包围的序列,可以通过**()和tuple()**函数定义,不能修改,只有在定义的一瞬间修改。
A = (1,2,3)#这就是一个元组
优点:
- 遍历元组比列表快
- 元组不可变,元组中数据被写保护,一些软件比较重要的数据通过元组进行存储
我们这里先来定义一个元组:
num = (1,2,3,'ad')
print(num)
type(num)
(1, 2, 3, 'ad')
tuple
如果我们元组里面只放一个数据:
num = (2)
type(num)
int
这里,我们定义的元组,最后却成了一个int型数据。如果重新定义一种形式:
num1 = ('a')
type(num1)
最后输出的结果也是字符串str类型,那么,这是为什么呢?
Python中的()同样也表示数学运算的一个基本符号,比如(1+1)*2,所以这就和元组的这个小括号产生了歧义,当元组中只有一个元素,而又没有逗号的时候,它会把这元素运算出来,这个小括号会被Python解释器识别为一个运算符号,所以得到的是那个元素本身的数据类型。
所以,为了解决这个问题,我们只需在定义元组的元素后面加上一个逗号就可以消除这种情况。
num = (2,)
type(num)
tuple
元组中元素的访问:
元组中对于元素的访问依然是按照索引来访问的。
num = (1,2,3,'jk','hy')
print(num[0])
print(num[1])
1
2
修改元组:
前面说到,元组是不可变的,也就是说,元组中的元素在被赋值后不能改变。但是,如果元素本身是一个可变数据类型的列表,那么其嵌套项可以被改变。
例如:
num = (1,2,[7,8])
print(num)
num[2].append(3)
print(num)
(1, 2, [7, 8])
(1, 2, [7, 8, 3])
如果我们试着改变一下元组内元素的值:
num = (1,2,[7,8])
print(num)
num[2][1] = 'jk'
print(num)
(1, 2, [7, 8])
(1, 2, [7, 'jk'])
如果我们在元组内嵌套一个列表,我们也是只能对列表内的数据进行增删。
tuple()函数:
tuple函数的功能与list函数基本上一样的,以一个序列作为参数并把它转换为元组,如果参数是元组,那么该参数就会被原样返回。
num1 = [2,3,4,'jk']
num1 = tuple(num1)#列表变元组
print(num1)
str1 = 'beautiful'
str1 = tuple(str1)#字符串变元组
print(str1)
(2, 3, 4, 'jk')
('b', 'e', 'a', 'u', 't', 'i', 'f', 'u', 'l')
元组的索引也是和访问列表与字符串完全一致的。
嵌套元组的访问方式:这种方式其实与c语言的矩阵访问方式差不多的。
num = ((1,'jk'),(2,'hy'),(3,'aj'))
print(num[0][1])
print(num[1][1])
jk
hy
元组的查找
index 从左往右返回第一个遇到的指定元素的索引,如果没有,报错
num = (1,2,3,'jk','hy')
num.index(2)
1
count 返回元组当中指定元素的个数
num = (1,2,3,'jk','hy')
num.count(3)
1
python元组与列表的区别
1、元组和列表都是有序的,元组不可修改,列表可修改。
2、元组和列表的元素可以是任何类型
3、元组的元素长度可以任意。