从零开始学Python-Day9-集合list和元组tuple

Python零基础 木人张 3年前 (2020-03-16) 902次浏览 0个评论 扫描二维码
文章目录[隐藏]

list

list是有序的集合,可随时添加删除元素。用中括号[]圈起来,例如

>>> 花名册 = ['张三','李四','王五','赵六']
>>> 花名册
['张三', '李四', '王五', '赵六']

在这里,花名册是一个变量,就是一个有序的list,索引排序的位置是从[0]开始,依次往后,len()函数可以统计list中元素个数:

>>> len(花名册)
4
>>> 花名册[0]
'张三'
>>> 花名册[1]
'李四'
>>> 花名册[2]
'王五'
>>> 花名册[3]
'赵六'
>>> 花名册[4]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: list index out of range

索引的位置超出了列表的元素总数的话就会报错indexerror,最后一个元素的索引位置可以记为len(花名册)-1
索引序列还可以倒序排列,最后一个元素的位置是-1,依次往前数就是-2、-3、-4

>>> 花名册[-1]
'赵六'
>>> 花名册[-2]
'王五'
>>> 花名册[-3]
'李四'
>>> 花名册[-4]
'张三'
>>> 花名册[-5]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: list index out of range

同样,超出索引范围报错indexerror,倒序从后往前数,有几个元素就有负几对应的位置。

追加与删除

前面说了,list是个随时可以添加删除元素的有序序列

追加到末尾           append
追加到指定位置        insert
删除末尾元素         pop
删除指定位置元素      pop
替换指定位置元素      直接向指定索引位置赋值

效果如下:

>>> 花名册.append('孙七')
>>> 花名册
['张三', '李四', '王五', '赵六', '孙七']
>>> 花名册.insert(0,'木人张')
>>> 花名册
['木人张', '张三', '李四', '王五', '赵六', '孙七']
>>> 花名册.pop()
'孙七'
>>> 花名册
['木人张', '张三', '李四', '王五', '赵六']
>>> 花名册.pop(0)
'木人张'
>>> 花名册
['张三', '李四', '王五', '赵六']
>>> 花名册[0]='木人张'
>>> 花名册
['木人张', '李四', '王五', '赵六']

list内部的元素可以是不同数据类型,一个list也可以作为另一个list的元素,如下,Q这个list里既有字符串,又有数值,又有布尔值;我们把之前的花名册这个序列添加到Q的末尾,最终的Q序列里面就有了四个元素,最后一个元素是另一个list序列花名册,话有点绕,但还算好理解:

>>> Q = ['Python',2020,True]
>>> Q.append(花名册)
>>> Q
['Python', 2020, True, ['木人张', '李四', '王五', '赵六']]
>>> len(Q)
4

如果在Q中要取到木人张该如何操作?可以用Q[-1][0]表示,所以Q其实就是一个二维数组。
如果一个list为空,即里面没有元素,那么他的长度也就len应该等于0

>>> L = []
>>> len(L)
0

tuple

tuple叫做元组,它跟list最大的区别就是一旦初始化就不允许再变化,所谓初始化就是给它赋值。注意这里跟list的区别,元组tuple的内容是以()括起来的,list是用[]

>>> 花名册 = ('张三','李四','王五','赵六')
>>> 花名册
('张三', '李四', '王五', '赵六')

因为是不可变化的,自然就没有办法增加、删除、替换元素了。元组内元素的定位跟list一样,用[]扩住的序号表示,从第一位开始0,1,2….

>>> 花名册 = ('张三','李四','王五','赵六')
>>> 花名册[0]
'张三'

tuple的不可变性强调了数据的安全性,对于不需要用户交互变化的量,最好用tuple,能不用list就不用。

空tuple和1个元素的tuple

如果需要定义一个空的tuple,可以写作()

>>> t = ()
>>> t
()

如果是定义只有一个元素的的tuple,需要在单独元素的后面加一个逗号, 否则就变成了给花名册这个变量单独赋值,因为这里()等同于数学里的小括号,Python规定这种情况下按数学的小括号计算,那么这里就变成了赋值的作用。

>>> 花名册 = ('张三')
>>> 花名册
'张三'
>>> 花名册 = ('张三',)
>>> 花名册
('张三',)

换成数字更容易理解,如下,我们给t这个变量赋值为2020,和我们给t这个元组赋值为只有一个2020数值的序列,如下。可以看到当我们输出单一一个元素的元组时,Python也给我们在它后面加上了逗号,以避免与数学上的()混淆:

>>> t = (2020)
>>> t
2020
>>> t =(2020,)
>>> t
(2020,)

“可变的”tuple

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

可以看出,初始化的时候元组t包含了三个元素:a、b和一个list [‘A’, ‘B’]
当对t[2][0]和t[2][1]重新赋值后,看似元组t的内容发生了变化,但事实上,作为元组t,它的元素依然是a、b和最初的那个list,只不过list作为一个容器,里面的内容发生了变化,而元组本身的内容并没有变化。
这可以帮助我们理解什么是tuple元组的“不变”其实说的是元组内的元素的指向永远不变,但当一个元素指向的对象是一个list,这个list是可变的。


木人张,版权所有丨如未注明 , 均为原创,禁止转载。
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址