list
list是有序的集合,可随时添加删除元素。用中括号[]圈起来,例如
在这里,花名册是一个变量,就是一个有序的list,索引排序的位置是从[0]开始,依次往后,len()函数可以统计list中元素个数:
索引的位置超出了列表的元素总数的话就会报错indexerror,最后一个元素的索引位置可以记为
索引序列还可以倒序排列,最后一个元素的位置是,依次往前数就是
同样,超出索引范围报错indexerror,
追加与删除
前面说了,list是个随时可以添加删除元素的有序序列
追加到末尾 append追加到指定位置 insert删除末尾元素 pop删除指定位置元素 pop替换指定位置元素直接向指定索引位置赋值
效果如下:
list内部的元素可以是不同数据类型,一个list也可以作为另一个list的元素,如下,Q这个list里既有字符串,又有数值,又有布尔值;我们把之前的花名册这个序列添加到Q的末尾,最终的Q序列里面就有了四个元素,最后一个元素是另一个list序列花名册,话有点绕,但还算好理解:
如果在Q中要取到木人张该如何操作?可以用表示,所以Q其实就是一个二维数组。
如果一个list为空,即里面没有元素,那么他的长度也就len应该等于0
tuple
tuple叫做元组,它跟list最大的区别就是一旦初始化就不允许再变化,所谓初始化就是给它赋值。注意这里跟list的区别,元组tuple的内容是以()括起来的,list是用[]
因为是不可变化的,自然就没有办法增加、删除、替换元素了。元组内元素的定位跟list一样,用[]扩住的序号表示,从第一位开始0,1,2….
tuple的不可变性强调了数据的安全性,对于不需要用户交互变化的量,最好用tuple,能不用list就不用。
空tuple和1个元素的tuple
如果需要定义一个空的tuple,可以写作()
如果是定义只有一个元素的的tuple,需要在单独元素的后面加一个逗号, 否则就变成了给花名册这个变量单独赋值,因为这里()等同于数学里的小括号,Python规定这种情况下按数学的小括号计算,那么这里就变成了赋值的作用。
换成数字更容易理解,如下,我们给t这个变量赋值为2020,和我们给t这个元组赋值为只有一个2020数值的序列,如下。可以看到当我们输出单一一个元素的元组时,Python也给我们在它后面加上了逗号,以避免与数学上的()混淆:
“可变的”tuple
可以看出,初始化的时候元组t包含了三个元素:a、b和一个list [‘A’, ‘B’]
当对t[2][0]和t[2][1]重新赋值后,看似元组t的内容发生了变化,但事实上,作为元组t,它的元素依然是a、b和最初的那个list,只不过list作为一个容器,里面的内容发生了变化,而元组本身的内容并没有变化。
这可以帮助我们理解什么是tuple元组的“不变”其实说的是,但当一个元素指向的对象是一个list,这个list是可变的。