定义
元组是存在于小括号"()"种,由逗号“,”分隔的内置数据类型,属性与列表类似,区别是元组一旦初始化,便不能修改。
下面从定义的内容中详细解读下元组这个类型:
创建元组
既然要研究元组,必然要先创建元组,只需要在括号中添加元素,用逗号隔开
以下列出四个定义,然后打印出对应的数据类型
tup= ("acmula","xiaoC",1,2,3)
tup1= ()
tup2= (1)
tup3= (1,)
print(type(tup))
print(type(tup1))
print(type(tup2))
print(type(tup3))
首先,是一个有内容的元组、是一个空元组。
然后厉害了,和有什么区别?只是多了一个逗号么?
看下运行结果先:
看出来区别了吧,是一个元组,而居然是一个int类型!对,因为1 是一个int,如果是"a",就是str、如果是{"aaa":"aaa"},那它就是个dict ······
敲黑板!~如果需要定义的元组里,只有一个元素,需要在元素后边加上一个",",否则这个括号"()",会被先当做运算符
其实,创建元组,也可以不加括号,直接写成也是可以的,但是个人不推荐,毕竟自己看着都觉得乱
访问元组
OK,上边说了,元组是有序的,那么既然有序,就能按照有序数据类型玩儿
索引
tup= (1,2,3,"a","b","c")
print(len(tup))
print(tup[])
print(tup[5])
print(tup[-1])
上边定义了一个元组,看了一下长度,打印了第一个和最后一个元素,运行结果:
6
1
c
c
这跟其他的有序数据类型用法一样,不多说了
切片
tup= (1,2,3,"a","b","c")
print(len(tup))
print(tup[2::2])
print(tup[:-1])
print(tup[1:5:2])
这一段进行了切片操作,从第三个元素开始,隔一个取一个元素;取除最后一个元素外的所有元素;在第二个到第五个元素中,隔一个取一个元素。与其他有序数据类型用法一样
6
(3, 'b')
(1, 2, 3, 'a', 'b')
(2, 'a')
遍历元组中的元素
tup= (1,2,3,"a","b","c")
foriintup:
print(i)
这个也已经很熟悉了,直接上结果:
1
2
3
a
b
c
修改元组
曲线救国修改元组
"元组本身不可变,存在于元组里面的值不允许修改"哦,好,那他喵的怎么修改元组呢?
先尝试一下之前的修改元素的方式:
好,可以放弃这种方式了,直接提示不支持,还怎么玩儿呢
现在展示一种曲线救国的办法,虽然麻烦了一点,但好在能实现目的
tup= (1,2,3,"a","b","c")
print(id(tup))
tup= ("123123", )+tup[1:]
print(id(tup))
print(tup)
先看下运行结果:
1520973895720
1520991085000
('123123', 2, 3, 'a', 'b', 'c')
看到新的元组,说明现在已经是想要的样子,但是这真的是修改了之前的元组么?上边把两次的id打印出来了,可以看出来,使用的内存地址已经不是同一个,所以这其实是一个新的元组了
一个伪修改的栗子
然后来看一种其他的修改:
tup= (1,2,3,"a","b",[1,2,3])
print(id(tup))
tup[-1][1] =5
print(id(tup))
print(tup)
直接看结果:
2124537518120
2124537518120
(1, 2, 3, 'a', 'b', [1, 5, 3])
好么,还说不能改,这不是上边的都变成了么?
其实并不是这样的,上边的这个变化虽然是在元组中,但实际上改的已经不是元组这一维度的东西,而是元组内的列表的元素,所以两次打印的id是相同的,元组并没有发生变化。
就是说,元组内的可变元素的值可以修改,元组内的元素(包括可变元素)本身,是不能变的
删除元组
元组中的元素是不可变的自然也是不能删除的,但元组本身是能删除的,只需要它就好了
tup= (1,2,3,"a","b",[1,2,3])
deltup
print(tup)
运行结果如下:
Traceback (most recent call last):
File "D:/code/pycode/pytest/demo.py", line 5, in
print(tup)
NameError: name 'tup' is not defined
直接删除元组后,打印它,以为不存在了,所以报未定义错误
删除元组操作没什么可说的,记下就好了
其他
长度、求最大、求最小,看着眼熟吧,跟list的一样,不重复了,想看详细的欢迎翻阅之前的列表文章
列表转换为元组函数
list= [1,2,3,"a","b",[1,2,3]]
print(type(list))
tup=tuple(list)
print(tup)
print(type(tup))
这个也很简单,直接把列表转换为元组,运行结果:
(1, 2, 3, 'a', 'b', [1, 2, 3])
判断元素是否在元组内
tup= (2,3,"a","b",[1,2,3])
print("a"intup)
print(1intup)
print(8intup)
这里需要注意一下,判断元素是不是在元组内,也是仅判断元组的元素一个维度,不会对下一个维度进行判断,所以是在元组中的列表元素中,但不存在于元组的元素中。
所以运行结果:
True
False
False
end
欢迎关注公众号
领取专属 10元无门槛券
私享最新 技术干货