元组
元组既然是不可变(immutable)对象,自然也就没有增加、删除元素的方法。
基本操作
使用一对括号( ) 就能创建一个元组对象,如:
a = () # 空元组对象
b = (1,'xiaoming',29.5,'1731222222')
c = ('001','2019-11-11',['三文鱼','哦依稀'])
它们都是元组,除了 list 是用 [ ] 创建外,其他都与 list 很相似,比如都支持切片操作。
特别注意:一个整数加一对括号,比如 (10),返回的是整数。必须在整数后加一个逗号才会返回为元组对象 (10,)。
列表和元组都有一个很好用的统计方法 count,实现对某个元素的个数统计:
from numpy import random
a = random.randint(1,5,10) # 从 [1,5) 区间内随机选择 10 个数
at = tuple(a) # 转 tuple:(1, 4, 2, 1, 3, 3, 2, 3, 4, 2)
at.count(3) # 统计 3 出现次数,恰好也为 3 次
可变与不可变
列表是一个可变容器,可变与不可变是一对很微妙的概念。
我们先创建一个列表 a,其中,新创建的列表在索引 2 处还是一个列表(list)。
我们可以使用 a.pop() 删除最后一个元素。删除后我们还可以使用 a.insert() 在某个索引位置添加一个元素。(a.insert(1,2) 在索引 1 处添加一个元素 2。)
因此,对列表而言,因为它可以增加或删除元素,所以它是可变的。
但是,如果仅仅在列表 a 中做这一步操作:
a[2].insert(1,6) #在 a[2](也是一个列表)中插入元素 6
那么插入后便成了这样:
对于 可变 这个概念而言,这就不是真正调整a为 可变 的操作。
tuple 就是一个典型的不可变容器对象。对它而言,同样也可以修改嵌套对象的取值,但这并没有真正改变 tuple 内的元素。
如下所示,有一个元组 a:
a =(1,3,[5,7],9,11,13)
a 的存储示意图如下:
下面插入一个元素 6:
a[2].insert(1,6)
可以看到,a 内元素没增没减,长度还是 6:
这就是不可变对象的本质,元组一旦创建后,长度就被唯一确定。
但是,对于 list 而言,列表长度会有增有减,所以它是可变的。
元组 可变不可变 里 图2的list里的数字写错了
已更新修正此问题 感谢提醒