**
列表
**
1、序列是Python中最基本的数据结构,它可以作为一个方括号内的逗号分隔值出现。
2、列表的数据项不需要具有相同的类型
3、list列表的本质是一种有序的集合
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
如下所示:
list1 = ['physics', 'chemistry', 1999, 2021]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
创建列表
#创建空列表
list1 = []
list1 = list() #格式化
#创建带有元素的列表
list2 = [10, 20, 30, 40]
print(list2)
#结果 [10, 20, 30, 40]
list3 = [33, "good", True, 10.32]
print(list3)
#结果[33, 'good', True, 10.32]
注意:列表中的元素类型可以是任意的基本数据类型或者是自定义的数据类型
列表元素的访问
1、列表的取值
功能:访问list列表中元素值
语法:列表名[索引]
list1[index]
index取值范围[0,len(list1))
len(list)表示列表的长度
list4 = [22, 33, 12, 32, 45]
#下标从0开始,最大值为len(list4)-1
print(list4[0]) # 22
注意:当索引值大于len(list4)-1的时候,会出现以下错误:
print(list4[5])
IndexError: list index out of range
这个错误就是下标越界【下标超出了可表示的范围】
** 列表元素的替换**
功能:更改列表元素的值
语法:列表名[下标] = 值
list1[index] = 值
list4 = [22, 33, 12, 32, 45]
list4[0] = "hello"
print(list4[0])
列表操作
4.1 列表组合
语法: 列表3 = 列表1 + 列表2
将列表1和列表2中的元素取出,组成一个新的列表并返回。
list1 = [1, 2, 3]
list2 = ['hello', 'yes', 'no']
list3 = list1 + list2
print(list3)
#结果
[1, 2, 3, 'hello', 'yes', 'no']
4.2 列表重复
语法: 列表2 = 列表1 * n
list1 = [1, 2, 3]
list2 = list1 * 3
print(list2)
#结果
[1, 2, 3, 1, 2, 3, 1, 2, 3]
4.3 判断元素是否在列表中
语法:元素 in 列表
若存在则返回True,否则返回False
list1 = [1, 2, 3]
print(1 in list1)
#结果
True
4.4 列表截取
语法:list1[start:stop:step]
参数一:表示截取的开始下标值,默认为0
参数二:表示截取的结束下标值,默认为列表末尾
参数三:表示截取的步长,默认为1,可指定
注意:1.截取区间[start, end),左闭右开
2.list1[::-1]可以获得倒叙的列表
list1 = ["hello",2,True,False,3.14]
list2 = list1[:]
list3 = list1
print(list1[0:3:2]) #['hello', True]
print(list1[::-1]) #[3.14, False, True, 2, 'hello']
print(list1[:3:-1]) #[3.14]
print(list1[3::-1]) #[False, True, 2, 'hello']
二位列表
语法:列表 =[列表1,列表2,列表3,… ,列表n]
当列表中存放的元素刚好又是列表的时候,我们可以称这个列表为二维列表
#创建二维列表,即列表中的元素还是列表
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]
#二维列表取值(访问)
语法:列表名[下标1][下标2]
注意:下标1代表第n个列表(下标从0开始),下标2代表第n个列表中的第n个元素
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]
print(list1[0][0]) # 1
列表的方法
1、 list.append(元素/列表)
功能:在列表中末尾添加新的元素【在原本的列表中追加元素】
注意:append()中的值可以是列表也可以是普通元素
list1 = [3, 4, 6]
list1.append(6)
print(list1) # [3, 4, 6, 6]
2、 list.extend(列表)
功能:在列表的末尾一次性追加另外一个列表中的多个值
注意:extend()中的值只能是列表/元组,不能是元素
list1 = [1,2,3]
list2 = [3, 4,5]
list1.extend(list2)
print(list1) #[1, 2, 3, 3, 4, 5]
3、list.insert(下标值, 元素/列表)
功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延
注意:插入的数据可以是元素也可以为列表
list1 = [1,2,3]
list1.insert(1,0)
print(list1)# [1, 0, 2, 3]
list1.insert(1,[2, 4, 8])
print(list1) # [1, [2, 4, 8], 0, 2, 3]
4、 list.pop(下标值)
功能:移除列表中指定下标处的元素(默认移除最后一个),并返回移除的数据
list1 = [1, [2, 4, 8], 0, 2, 3]
list1.pop() # 3
print(list1) # [1, [2, 4, 8], 0, 2]
list1.pop(2) # 0
print(list1) # [1, [2, 4, 8], 2]
5、list.remove(元素)
功能:移除列表中的某个元素第一个匹配结果
list1 = [1, 2, 3]
list1.remove(2)
print(list1) # [1, 3]
6、 list.clear()
功能:清除列表中所有的数据
list1 = [1, 2, 3]
list1.clear()
print(list1) # []
7、 list.index(object[, start][, stop])
功能:从指定的范围的列表中找出某个值(object)第一匹配的索引值
查询范围[start,stop),若不指定范围,则默认是整个列表。
list1 = [1, 2, 3]
list1.index(2) # 1
list1.index(4) #ValueError: 4 is not in list
注意:若在列表中找不到这个元素,则会报错。
8、 list.count(元素)
功能:查看元素在列表中出现的次数
list1 = [1, 2, 3, 1]
list1.count(1)# 2
9、 len(list)
功能: 获取元素列表个数(长度)
list1 = [1, 2, 3, 1]
len(list1)# 4
10、 max(list)
功能:获取列表中的最大值
list1 = [1, 2, 3, 1]
max(list1) # 3
11、 min(list)
功能:获取列表中的最小值
list1 = [1, 2, 3, 1]
min(list1) # 1
注意:比较的是ASCII值
12、 list.reverse()
功能: 该方法没有返回值,但是会对列表的元素进行反向排序。
list1 = ["hello1","good1","nice","good","hello"]
print(id(list1))#2158912823880
list1.reverse()
print(list1) #['hello', 'good', 'nice', 'good1', 'hello1']
print(list1.reverse()) #None
print(id(list1))# 2158912823880
13| list.sort()
list1.sort(reverse=False)
功能:将list中的元素进行排列【默认reverse=False】
当reverse为True的时候,降序排列。
list1 = [1, 2, 3, 1]
list1.sort()
print(list1)#[1, 1, 2, 3]
14、 赋值拷贝
语法:list1 = [1, 2, 3]
list2 = list1
特点:共用同一块内存空间,更改其中任意一个变量,其他变量都会受到影响。
list1 = [1,2,3,4,[1,2,3,4]]
list2 = list1
print(id(list1))# 1585735384392
print(id(list2))#1585735384392
list2[-1] = True
print(list2) # [1, 2, 3, 4, True]
print(list1)#[1, 2, 3, 4, True]
注意:赋值拷贝为引用拷贝,类似于快捷方式
15、 浅拷贝
语法:list1 = [1, 2, 3]
list2 = list1.copy()
注意:只适用于一维列表;浅拷贝为一维内存拷贝,开辟了新的内存空间
不完全内存拷贝,对于一维列表重新开辟了一块内存空间。
二维列表存放在一维列表中存放的是列表的地址,出现二维列表间接的引用了
同一块内存区域(即二维列表还是共用内存)。
list1 = [1, 2, 3, 1]
list2 = list1.copy()
print(list2)#[1, 2, 3, 1]
print(id(list2)) #4314525320
print(id(list1))# 4314524808
二维数组:
import copy
list1 = [1,2,3,4,[1,2,3,4]]
list3 = list1.copy()
list3[-1][-1] = True
print(id(list1))#1614254026312
print(id(list3))#1614254024904
print(list1)#[1, 2, 3, 4, [1, 2, 3, True]]
print(list3)#[1, 2, 3, 4, [1, 2, 3, True]]
16、 深拷贝
impo copy
list2 = copy.deepcopy(list1)
完全内存拷贝,相当于将list1中的所有列表元素重新复制了一份,
对于多维的也重新开辟了新的内存空间
list1 = [1,2,3,4,[1,2,3,4]]
list4 = copy.deepcopy(list1)
list4[-1][-1] ="hello"
print(id(list1))#2215608102408
print(id(list4))#2215608101128
print(list1)#[1, 2, 3, 4, [1, 2, 3, 4]]
print(list4)#[1, 2, 3, 4, [1, 2, 3, 'hello']]
17、 list(元组)
功能:将元组转为列表
list1 = list((1, 2, 3, 4))
print(list1)#[1, 2, 3, 4]
列表的遍历
1、使用for循环遍历列表
语法:for 变量名 in 列表:
功能:for循环主要用于遍历列表
遍历:指的是依次访问列表中的每一个元素,获取每个下标对应的元素值
list1 = ['hello', 78, '你好', 'good']
for item in list1:
print(item)
2、 使用while循环遍历列表[使用下标循环]
语法:
while 下标 < 列表的长度:
语句
下标 += 1
3、 同时遍历下标与元素
语法:
for 下标,变量 in enumerate(列表)
语句
list1 = ['hello', 78, '你好', 'good']
for index,item in enumerate(list1):
print(index, item)
结果:
0 hello
1 78
2 你好
3 good
4、enumerate()[枚举]函数
功能:用于一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引
序列同时列出数据与数据下标,一般使用在for循环中
enumerate(obj, [start =0])
obj:一个可迭代对象
start:下标起始位置