列表的相关操作和方法/深浅拷贝

一. 列表的相关操作

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 .总结

浅拷贝: 只拷贝一级容器中的所有数据
    深拷贝: 拷贝所有层级中的所有元素,都单独放到全新空间,作为独立副本;
原文地址:https://www.cnblogs.com/whc6/p/14056882.html