列表的相关操作和方法/深浅拷贝
一. 列表的相关操作
1. 列表的拼接 (同元组)
lst1 = ["梁新宇","孟凡伟"] lst2 = ["孙接口","王永捐"] res = lst1 + lst2 print(res)
2. 列表的重复 (同元组)
lst1 = ["梁新宇","孟凡伟"] res = lst1 * 3 print(res)
3. 列表的切片 (同元组)
lst = ["曹培显","欢庆","刘玉波","耿择时","家营和","黄常见","刘灵镇","孙翔宇"]
1.[开始索引:] 从开始索引截取到列表的最后
res = lst[2:] print(res)
2. [:结束索引] 从开头截取到结束索引之前(结束索引-1)
res = lst[:7] print(res)
3. [开始索引:结束索引] 从开始索引截取到结束索引之前(结束索引-1)
res = lst[3:5] print(res)
4. [开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
# 0 3 6 9 12 ... 曹培显 耿择时 刘灵镇 # 从左到右 正向截取 res = lst[::3] print(res)
# 从右向左 逆向截取
res = lst[::-1]
print(res)
[:]或[::] 截取所有列表
5. 列表的修改 ( 可切片 )
# 1.一次修改一个 lst[1] = "菲菲" print(lst) # 2.一次修改多个 等号右边的数据必须是Iterable(容器类型数据 range对象 迭代器) lst[2:5] = [1,2,3,4,5,6] lst[2:5] = "abc" lst[2:5] = range(100,104) print(lst) # 3.一次修改多个(带步长) 截取几个,修改几个 # ['曹培显', 102, 6] lst[::4] = [500,600,700] print(lst)
6. 列表的删除 ( 可切片 )
lst = ["曹培显","欢庆","刘玉波","耿择时","家营和","黄常见","刘灵镇","孙翔宇"] # 1.一次删除一个 # del lst[0] # print(lst) # 2.一次删除多个 # del lst[1:5] # del lst[::5] # print(lst) # 3.注意点 (改写法删除的是res变量,不是列表) res = lst[::5] del res print(lst)
二. 列表相关方法
增
# append 向列表的末尾添加新的元素
lst.append("何子豪") print(lst)
# insert 在指定索引之前插入元素
lst = ['李雅琪', '何子豪'] lst.insert(0,"于盛林") print(lst)
# extend 迭代追加所有元素
""" 必须是Iterable这样的可迭代性数据 """ tup = ("王雨涵","赵沈阳") lst.extend(tup) print(lst)
删
# 1.pop 通过指定索引删除元素,若没有索引移除最后那个 (推荐)
lst = ['于盛林', '李雅琪', '何子豪', '王雨涵', '赵沈阳',"王雨涵"] # 默认删掉最后一个 res = lst.pop() # 可以指定删除 res = lst.pop(2) print(res) print(lst)
# 2.remove 通过给予的值来删除,如果多个相同元素,默认删除第一个
lst = ['于盛林', '李雅琪', '何子豪', '王雨涵', '赵沈阳',"王雨涵"] lst.remove("王雨涵") print(lst)
# 3.clear 清空列表
lst.clear() print(lst)
其他操作
# index 获取某个值在列表中的索引
lst = ['于盛林', '李雅琪', '何子豪', '王雨涵', '赵沈阳',"王雨涵"] res = lst.index("王雨涵")
# count 计算某个元素出现的次数
"""无法像字符串中的count那样写开始和结束索引.""" lst = ['于盛林', '李雅琪', '何子豪', '王雨涵', '赵沈阳',"王雨涵"] res = lst.count("王雨涵") print(res)
# sort() 列表排序 (基于原有列表进行修改)
"""默认:从小到大排序""" lst = [1,2,100,-3,-4] lst.sort() """从大到小排序""" lst.sort(reverse=True) print(lst) # 针对于字母 """ascii 编码进行排序 大小写字母ascii相差32""" """按照ascii编码的大小,一位一位的进行比较,默认从小到大""" lst = ["yingmuhuadao","liuchuanfeng","caixukun","caibu","sandingshou"] lst.sort() print(lst) # 针对于中文 (能排序,无规律可循) lst = ["王文","王源"] lst.sort() print(lst)
# reverse 列表反转操作
lst = ["yingmuhuadao","liuchuanfeng","caixukun","caibu","sandingshou"] lst.reverse() print(lst)
三. 深浅拷贝
1. 浅拷贝
# 方法一 lst1 = [1,2,3] lst2 = lst1.copy() lst1.append(4) print(lst1,lst2) # 方法二 import copy # 模块.copy() # copy.copy() lst1 = [1,2,3] lst2 = copy.copy(lst1) lst1.append(5) print(lst1) print(lst2)
2. 深拷贝
"""
# 现象: 通过浅拷贝只能拷贝一级容器中的所有数据,形成独立副本,但是二级容器中的所有数据仍然延续以前的地址,共用同一份;
lst1 = [1,2,3,[5,6,7]]
lst2 = copy.copy(lst1)
lst1[-1].append(888)
lst1.append(999)
print(lst1,lst2)
"""
import copy lst1 = [1,2,3,[5,6,7]] lst2 = copy.deepcopy(lst1) # 二级容器中插入数据 lst1[-1].append(888) # 一级容器中插入数据 lst1.append(999) print(lst1,lst2)
3 .总结
浅拷贝: 只拷贝一级容器中的所有数据
深拷贝: 拷贝所有层级中的所有元素,都单独放到全新空间,作为独立副本;