联想说 Python 基础 11 - 元祖
复合数据类型
目标:掌握几种复合数据类型的格式,以及基本运用。
以后常用。
前面的文章中,有看到一些特殊的数据类型,但是我们没有细致说明的。比如在函数这一节的最后讲可变参数的时候,他们的值就不太一样,分别是这样的:
-
*args 的值
(1, 2, 3, 4, 5, 6) -
**kwargs
{'name': 'alice', 'age': 0, 'sex': 'yao'}
这些我们可以统称为复合数据类型(为了和前面的基本类型区分开,其实它们也是基本类型),除了这两种外还有(暂且不表)。
有没有人对为什么要有复合数据类型的数据有疑惑的?
如果有,你就想象一下你抱着一箱水(有箱子),和抱着 24 瓶水,哪个更舒服。
复合数据类型就相当于给这一堆水加了箱子,方便批量使用。
元祖
形如 (元素1, 元素2.....) 这样的,就是 元祖 了,所以上面看到的 *args 的值就是元祖类型。
为什么叫元祖?可能因为它圆(括号)吧 (¬‿¬)。
前面好像说过有一个函数可以查看数据类型的吧,这里我们分别用 type 函数查看一下元祖是用什么表示的,以及它的结果是怎么显示的。
元祖类型
格式
咱们先定义一个元祖赋值给一个变量,然后分别查看其值和类型:
yz = (1, 2, 3, 4, 5, 6)
print(yz)
print(type(yz))
结果:
(1, 2, 3, 4, 5, 6)
<class 'tuple'>
从结果可以看出元祖的值和定义的是一模一样的,以后看到用小括号括起来的值,基本上就是元祖了(没说绝对哈,因为它也有可能是字符串)。
再看其类型的表示,打印得到的结果是 <class 'tuple'>,其中引号里面的 tuple 就是它的类型了,它就代表了 元祖(关键字)。
特点
- 不可变:元组是不可变的,即元组中的元素不可以增加、删除或修改,只能访问
有序:元祖是有序的,有顺序和位置,从0开始有多个成员数据:成员之间用逗号隔开可以是任意数据类型:元素可以是数字、字符串等数据可以重复:元祖中的元素可以重复
因为它相对来说不是很灵活的原因,所以相对来说,人们更愿意用一些比较灵活的,比如列表。
注意:当元组中只有一个元素时,需要在元素后面加逗号。
元祖常用方法
查询
索引
什么是索引?
索引 就是 元素所在的位置,比如:
0,1,2,3,4,5,6,7,8,9
数字 1 所在的位置是 2,但是在编程中,索引是从 0 开始算的,所以数字 1 真实的索引值应该是 1。
再看元素:
a,b,c,d,e,f,g
请问,d 的索引是什么?答案是 3。
索引不仅可以从左往右算,还可以从右往左算哦!
如果从右往左算,则是从 -1(表示最后一个) 开始,越往左,值越小。
根据索引获取元祖元素
首先给一个元祖,后面演示的过程中,没有特别的都会使用这个元祖演示:
tp = (1, 2, 3, 4, 5, 6, 7, 8, 9)
要通过索引获取元祖中的某个元素,可以通过 元祖名称[索引] 来获取。
那么,要获取索引值为 6 的元素的写法如下:
tp_idx = tp[6]
print(tp_idx)
最后得到的结果为 7。
切片
切片与索引类似,不过使用切片一般是范围获取。它的格式如下:
元祖名称[开始索引:结束索引]
需要注意的是,切片 是包左不包右,也就是说包含开始索引的值,但是不包含结束索引的值。
那这段代码执行后得到的结果是什么呢?
tp_sli = tp[0:1]
print(tp_sli)
结果:(1,)。
为什么叫切片?
把元祖中的每个元素否切分开成一片一片的,你要那片拿那片,所以叫切片。
切片的其他用法
比如 :
-
[1:]表示从索引 1 开始获取,直到结束(包括最后一个元素)结果:(2, 3, 4, 5, 6, 7, 8, 9)同理,开始索引不提供,则表示结束索引之前的都要。
-
[-2:-1]表示从倒数第二个到最后一个,但是不包含最后一个结果:(8,) -
[1:6:2]表示从索引 1 开始获取,到索引 6 每 2 个元素获取2 表示 步长,也就是每两个元素获取一个:
结果:(2, 4, 6)
索引和切片,在后面也会用到,概念也都一样。
其他方法
以下方法相对简单,就不再一一详细说明了,给个例子自己体会
-
len():获取目标长度
print(len(tp)) # 9 -
in:判断元素是否在目标中
与 in 类似的还有 not in,写法基本一样,作用刚好相反
print(1 in tp) # True print(10 in tp) # False
len 和 in 并非元祖独有,在其他复合数据类型中也可以使用。
-
count():统计元素个数
print(tp.count(1)) # 1 个 -
index():获取元素索引
print(tp.index(1)) # 0 索引值
遍历
遍历,翻译一下就叫全部经历一遍。
就拿元祖来说,遍历某个元祖就是对元祖中的每个元素都 宠幸 一遍。
很遗憾的是,Python 并没有特地提供专门用来遍历的语法,那怎么办?
再看看遍历的含义,是对目标中的每个元素都访问一遍。循环不就是来干这苦活累活的吗?
一般说遍历都会和循环一起使用,对上面的元祖遍历则可以这样:
print("-------------------")
i = 0
while i < len(tp):
print(tp[i])
i += 1
print("-------------------")
for i in range(0, len(tp)):
print(tp[i])
print("-------------------")
for t in tp:
print(t)
任意一个随便选,我还是喜欢第三个。
嵌套
还记得前面说的嵌套吗,既然元祖里面可以放东西,那能不能继续放元祖?
答案是可以的,就像这样:
tps = (1, 2, 3, (4, 5, 6))
名为 tps 的元祖中存在整型和元祖类型的元素,而元祖类型元素的索引是 3,也就是 tps[3]。
也就是说 tps[3] 还是一个元祖,那么要获取这个内层元祖中的第一个元素怎么获取?
像这样:tps[3][0]。
不管某个东西套了多少层,只用管获取到的是什么类型的数据,然后根据这个类型获取就可以了。
后面几种复合类型也可以嵌套,咱就不特别说明了。

浙公网安备 33010602011771号