复杂数据类型-列表
# 列表
# 增
添加元素
- append():追加,在列表的末尾添加元素。它可以是单个元素,也可以是列表、元组等。
- extend():扩展,在列表的末尾添加元素。它可以是单个元素,也可以是列表、元组等,但不能是单个的元素。
- insert(index , obj):在指定位置插。insert() 会将 obj 插入第 index 个元素的位置。
l1 = [22, 33, 44, 55]
# 1.1append,追加,在列表的末尾添加元素 常用
l1.append(66) # 追加单个元素
# l1.append(77,88) #报错:TypeError: append() takes exactly one argument (2 given)
l1.append([77, 88]) # 追加多个元素,不能直接追加,通过列表的形式追加,形成了一个二维列表
# 1.2extend,扩展,在列表的末尾添加元素
l2 = [22, 33, 44, 55]
# l2.extend(66) #T报错:ypeError: 'int' object is not iterable 不能是单个数字
l2.extend([66]) # 追加单个元素,不能直接添加,参数一定是可迭代的
l2.extend([77, 88])
# 1.3insert,插入,在指定索引处插入一个元素,后面的元素向后顺延
# 列表名.insert(索引,被插入的元素)
l3 = [22, 33, 44, 55]
l3.insert(2, 66) # 插入单个元素
l3.insert(1, [77, 88]) # 插入多个元素:和append类似,将整个列表直接插入
print(l1)
print(l2)
print(l3)
"""
总结:
列表名.功能名(xx)
append可以直接添加单个元素,而extend不能
append在添加多个元素的时候,是以列表的形式添加,而extend只添加元素【打碎加入】
insert():在指定位置插入元素
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 删
删除元素
- 根据索引进行删除,使用 del 关键字或者 pop() 方法;pop()默认删除最后一个
- 根据元素本身的值进行删除,使用列表(list类型)提供的 remove() 方法;值不存在报错
- 将列表中所有元素全部删除,使用列表(list类型)提供的 clear() 方法。
# pop,弹出,移除并获取列表中指定索引处的元素 在栈中【列表的底层工作原理是栈】
list1 = [11, 22, 33, 44, 55]
# 1.pop() 注意:pop在默认情况下删除的是最后一个元素
result1 = list1.pop()
print(list1)
print(result1) # 删除的元素
result2 = list1.pop(2) # 删除下标为2的
print(list1)
# del
del list1[0: 1]
del list1[0]
# 2.remove() 移除,直接操作的是元素,不存在则报错
list2 = [11, 22, 33, 44, 55, 33, 33, 55]
list2.remove(22)
print(list2)
# 注意:移除指定元素在列表中第一次匹配到的元素【从左往右】!
# 注意会改变原有列表的索引,当删了33,后面的元素都会向前面移动一位
list2.remove(33)
print(list2)
# 3.clea()r 清除,将指定列表变为空列表 使用场景:循环中,每次需要清空【重置】列表
list2.clear()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 改
列表元素的替换/修改
- 通过下标
# 修改单个元素
list1 = [3,2,1]
list1[0] = 99
print(list1) # [99,2,1]
1
2
3
2
3
# 修改多个元素
nums = [40, 36, 89, 2, 36, 100, 7]
#修改第 1~4 个元素的值(不包括第4个元素)
nums[1: 4] = [45.25, -77, -52.5]
print(nums) # [40, 45.25, -77, -52.5, 36, 100, 7]
1
2
3
4
2
3
4
# 查
列表元素的访问:从0开始
- 索引,切片
- len:长度 max():最大值 min():最小值 count():计数
- index():下标
list1 = [i for i in range(101)]
list3 = list1
# 通过索引访问
print(list1[0])
print(list1[-1])
# print(list1[1000]) 列表下标越界
# 切片 格式:列表名[start:end:step],包头不包尾
print(list3[2:]) # 获取从开头到指定下标的元素。。。。
print(list3[2:6]) # 截取指定区间
print(list3[4:100]) # 特殊情况1:如果end超出了下标的范围,则默认获取从指定下标开始到结尾的元素 等价于print(list3[4:])
print(list3[1:6:2]) # 1,3,5#特殊情况2:step在默认情况下为1
print(list3[-1:-6]) # 当start和end都为负数,step为正数的时候,获取的结果为[]
# 将列表倒序输出 当start,end和step都为负数的时候,表示倒序
print(list3[-1::-1])
print(list3[::-1])
print(list3[-1:-6:-2])
# 3.1len(),获取列表长度
print(len(list1))
# 3.2max(),获取列表中的最大值
print(max(list1))
# 3.3min(),获取列表中的最小值
print(min(list1))
# 3.4index(),获取指定元素在原列表中第一次匹配到的索引
print(list1.index(11)) # 11在list1列表的索引
print(list1.count(2))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 其它用法
- reverse 反转列表
- sort() 排序(内部进行排序,不生成新列表)
- sored() 排序(生成了一个新的列表)
- copy() 在列表中
- list2 = list1 # 不新开辟内存空间
- list2 = list1.copy() #开辟一个新的内存空间
- 转换list() tuple()
# 其他用法
# reverse,反转
list1 = [35, 4, 5, 4, 654]
print(list1[-1::-1])
list1.reverse()
print(list1)
# sort,排序,默认为升序,在列表内部进行排序
# 列表名.sort()
list1.sort() # 升序
list1.sort(reverse=True) # 降序
# sorted,排序,默认为升序,生成了一个新的列表
# sorted(列表名)
newList = sorted(list1) # 升序
newList2 = sorted(list1, reverse=True) # 降序
# copy,拷贝
list1 = [23, 54, 56]
list2 = list1 # 没有重新开辟内存空间,
list2[1] = 100
print(list1)
print(list2)
print(id(list1) == id(list2))
# copy,深拷贝,堆空间层面上的拷贝【实体】
list1 = [23, 54, 56]
list2 = list1.copy() # 重新开辟内存空间,但是只有第一层
list2[1] = 100
print(list1)
print(list2)
print(id(list1) == id(list2))
# 转换
# list(),tuple()
# 二维列表:遍历
l1 = [[11, 22, 33, 44], [44, 55, 66]]
print(l1[0]) # l1[0] = [11, 22, 33, 44]
print(l1[0][2])
for i in l1:
for j in i:
print(j)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 面试题
list1 = [54, 6, 57, 5, 57, 7, 6, 7,22, 57, 57, 57, 436]
# 模拟index
for i in range(len(list1)):
if list1[i] == 22:
print(i)
# count(),统计个数,统计指定元素在列表中出现的次数
print(list1.count(22)) # 统计22在列表中出现的次数
# 删除所有的57 ! 因为删除列表的元素,后面的元素都会向前面移动,所以会导致有的元素删除失败。要么从列表后面开始删除,要么浅拷贝
for i in list1[:]:
if i == 57:
list1.remove(57)
print(list1)
# 模块copy ,copy(),deeepcopy()【面试题】
# 内容角度上的拷贝,copy只拷贝最外层,deepcopy可以拷贝内层的内容【二维列表中】
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]
d = copy.copy(c) # 浅拷贝,但用的还是父的引用
print(id(d) == id(c)) # False
e = copy.deepcopy(c) # 深拷贝
print(id(e) == id(c)) # False
a.append(4)
print(c) # [[1, 2, 3, 4], [4, 5, 6]]
print(d) # [[1, 2, 3, 4], [4, 5, 6]] # 浅拷贝只第一层,这里是第二层
print(e) # [[1, 2, 3], [4, 5, 6]]
"""
d:[[1, 2, 3], [4, 5, 6]]
[list1,list2]---->list1:[1,2,3] list2:[4,5,6]
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1
编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21