python基础之常用序列类型(列表)
列表(List)
列表是python中常用的数据类型,列表的定义方式为:list = [a,b,c,] 即中括号内用逗号分隔开各个元素,且列表中的元素不需要具有相同的类型。作为序列类型的一种,列表的中的每一个元素都分配有与其位置对应的一个数字——索引。列表中的第一个元素的索引为0,第二个为1,以此类推。可以利用列表中数据的索引,对列表进行取值与切片的操作。实例如下:
- >>> list = [1,'a',True,1+1j]
>>> list[1]#列表中的第一个元素索引为0,故通过索引1取出的值为列表中的第二个元素
'a'
>>> list[-1]#当不知道列表中元素的个数时,可以通过索引-1取出列表中的最后一个元素,倒数第二个元素的缩影为-2,以此类推
(1+1j)
>>> list[0:3]#列表可以通过设置起始索引与结束索引,以冒号分割的方式完成切片的操作。值得注意的是(包前不报后)即冒号前的索引对应的数据会被取出,而冒号后的索引
对应的数据不会被取出。故list[0:3]将取出索引为0,1,2的数据。
[1, 'a', True]
>>> list[-1:1]#对列表切片时同样可以使用复数索引,但需注意列表切片操作的默认步长为从左到右,即从位置靠前的元素开始向位置靠后的元素取。若冒号前的索引对应的元素在
冒号后的索引对应的元素之后,那么切片结果将返回一个空的列表
[]
>>> list[-1:1:-1]#如果需要倒序取出列表中的某段元素则必须设置步长为-1,这样即可倒序取出列表中的某段元素,而不会返回一个空列表
[(1+1j), True]
>>> list[:]#冒号前后添加索引,则将取出完整的列表
[1, 'a', True, (1+1j)]
>>> list[1:]#冒号之后不添加索引,则将从起始索引对应元素开始一直取到最后的元素
['a', True, (1+1j)]
>>> list[:-2]#冒号之前不添加元素,则将从列表中的第一个元素开始一直取到冒号后索引对应元素的前一个元素。
[1, 'a']
列表方法
除了对列表的取值,python中还包含多种列表方法,可以通过这些方法完成对列表的增删改查等操作,
- 增
1.append()
语法:list.append(obj)
作用:在列表末尾添加元素
- >>> list = [1,2,3,4]
- >>> list.append(5)
- >>> list
- [1, 2, 3, 4, 5]
2.insert()
语法:list.insert(index, obj)
作用:在索引位置出插入元素
- >>> list = [1,2,3,4]
- >>> list.insert(2,5)#在索引2的位置插入元素5
- >>> list
- [1, 2, 5, 3, 4]
3.extend()
语法:list.entend(seq)
作用:在列表末尾一次性追加另一个序列中的多个值,括号内只能是字符串,列表或者元组。
- >>> list = [1,2,3,4]
- >>> list.extend((5,6,7,8))
- >>> list
- [1, 2, 3, 4, 5, 6, 7, 8]
- 删
1.pop()
语法:list.pop(index)
作用:删除列表中对应索引处的元素,默认最后一个元素,并返回删除的元素。
- >>> list =[1,2,3,4]
- >>> list.pop()#默认删除列表中的最后一个元素,即4
- 4
- >>> list.pop(-1)#删除列表中索引为-1的元素,即最后一个元素,因为4已经删除故此时删除的元素为3
- 3
>>> list#此时列表中的元素仅剩1,2
[1, 2]
2.remove()
语法:list.remove()
作用:移除列表中某个值的第一个匹配项
- >>> list = [1,2,3,4,1]
- >>> list.remove(1)#仅移除列表中第一个出现的元素1
- >>> list
- [2, 3, 4,1]
3.clear()
语法:list.clear()
作用:清空列表
- >>> list = [1,2,3,4]
- >>> list.clear()
- >>> list
- []
- 改
1.通过对列表索引进行赋值的方式,可以完成对列表元素的修改
- >>> list = [1,2,3,4]
- >>> list[1]= 'a'
- >>> list
- [1, 'a', 3, 4]
2.reverse()
语法:list.reverse()
作用:反向列表中元素
- >>> list = [1,2,3,4]
- >>> list.reverse()
- >>> list
- [4, 3, 2, 1]
3.sort()
语法:list.sort(reverse=False)
参数说明:
- reverse — 排序规则,reverse = True 降序, reverse = False 升序(默认)。
作用:函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
- >>> list = [1,2,3,4]
- >>> list.reverse()
- >>> list
- [4, 3, 2, 1]
- >>> list = [1,2,3,4]
- >>> list = [2,8,7,3,4,1,5,6,9,10]
- >>> list.sort()
- >>> list
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- >>> list.sort(reverse = True)
- >>> list
- [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
- 查
1.index()
语法:list.index(obj)
作用:从列表中找出某个值第一个匹配项的索引位置
- >>> list = [1,2,3,4,2,2]
- >>> list.index(2)
- 1
2.count()
语法:list.count(obj)
作用:统计某个元素在列表中出现的次数
- >>> list = [1,2,3,4,1,2,3,4,1,1]
- >>> list.count(1)
- 4
列表的深浅复制
python中的列表复制大致分为两种,浅复制与深复制。不同于直接将列表赋值给一个新的变量,深浅复制后id均会发生改变。
- 浅复制
浅复制的形式为 list2 = list1.copy()
- >>> list = [1,2,3,4]
- >>> list2 = list.copy()
- >>> id(list)
- 8436472
- >>> id(list2)
- 50320128
2.深复制
深复制则需要导入copy模块,形式为 list3 = copy.deepcopy(list)
- >>> import copy
- >>> li = [1,2,3,4]
- >>> li3 = copy.deepcopy(li)
- >>> li3
- [1, 2, 3, 4]
- >>> id(li)
- 8436992
- >>> id(li3)
- 50320928
表面看来深浅复制仿佛并没有什么区别,实则不然。深浅复制的区别体现在当原列表中嵌套列表,且原列表嵌套的列表中的元素发生改变的情况。
即,浅复制模式下,当原列表中第一层元素发生改变,浅复制结果不变。若原列表中嵌套的列表内层的元素发生改变,则浅复制的结果也会随之改变。而
对于深复制,则无论原列表中第一层元素或者嵌套的列表中的内层元素发生改变,深复制结果均不变。
实例如下:
- >>> li = [1,[2,3],4,5,6]
>>> li2 = li.copy()#浅复制
>>> import copy
>>> li3 = copy.deepcopy(li)#深复制
>>> li
[1, [2, 3], 4, 5, 6]
>>> li2
[1, [2, 3], 4, 5, 6]
>>> li3
[1, [2, 3], 4, 5, 6]
>>> li[1][1] = '666666'
>>> li
[1, [2, '666666'], 4, 5, 6]
>>> li2
[1, [2, '666666'], 4, 5, 6]
>>> li3
[1, [2, 3], 4, 5, 6]
>>> li[0] = 2
>>> li
[2, [2, '666666'], 4, 5, 6]
>>> li2
[1, [2, '666666'], 4, 5, 6]
>>> li3
[1, [2, 3], 4, 5, 6]