零基础学 Python合集--1:list列表-持续更新
列表对象自带方法
append(element):在列表末尾添加单个元素。remove(value):删除列表中第一个值与参数相同的元素。extend(iterable):将另一个可迭代对象(如列表)中的元素逐个添加到原列表末尾。sort(key=None, reverse=False):对列表进行原地排序,默认升序;reverse=True时降序;返回值是None。clear():清空列表中的所有元素,列表变为空列表[]。copy():创建列表的浅拷贝(等价于list[:]),返回一个新列表,但内部元素仍是原对象的引用。
切片操作
list[start:end:step]:通过索引区间获取子列表,遵循左闭右开原则(包含start,不包含end)。多维列表中的切片如
list[:2]取前两行,row[:2]取每行的前两个元素。全切片
[:,:]在 NumPy 数组中使用,表示取所有行和所有列(纯列表不支持此写法)。
copy模块(拷贝操作)
copy.copy(obj):浅拷贝。新列表与原列表是不同的对象,但内部的子对象(如嵌套列表)仍共用同一内存地址,修改子对象会互相影响。copy.deepcopy(obj):深拷贝。递归复制所有层级的对象,新列表与原列表完全独立,修改任意元素均不影响原对象。
NumPy 库相关函数
np.array(list):将 Python 多维列表转换为 NumPy 多维数组。array.shape:返回数组各维度的大小(元组形式)。np.ndim(array):返回数组的维度数(例如二维数组返回2)。
#create list mylist = [] print(f"原始list内容:{mylist}") #添加元素 mylist.append(1) mylist.append(123) print(f"添加元素后的list内容:{mylist}") #访问元素 print(f"访问list中的第一个元素:{mylist[0]}") print(f"访问list中的第二个元素:{mylist[1]}") #修改元素 mylist[1] = 123456 print(f"修改元素后的list内容:{mylist}") #删除元素 mylist.remove(1) # 删除值为1的元素 print(f"删除元素后的list内容:{mylist}") #列表中添加列表mylist2的内容 mylist2 = [996,908,432,101] mylist.extend(mylist2)#extend方法是将mylist2中的元素逐个添加到mylist中 print(f"添加mylist2内容后的list内容:{mylist}") #列表内容排序 mylist3 = mylist.sort()#默认升序排序,赋值给mylist3后mylist3的值为None,因为sort()方法是就地排序,不返回新的列表 print(f"升序排序后的list内容:{mylist},mylist3:{mylist3}") #按降序排序 mylist.sort(reverse=True)#reverse参数为True时,按降序排序 print(f"降序排序后的list内容:{mylist}") #列表切片 #举例,只取第3-5个元素 sliced_list = mylist[3:6]#切片操作,mylist[3:6]表示从索引3开始(包含索引3),到索引6结束(不包含索引6),即取第3、4、5个元素,左闭右开区间 print(f"切片后的list内容:{sliced_list}") #列表长度 len_mylist = len(mylist) print(f"list的长度:{len_mylist}") #列表清空 mylist.clear()#将列表中的所有元素删除,但列表对象仍然存在,mylist仍然是一个空列表[] print(f"清空后的list内容:{mylist}") #列表复制 copy_mylist = mylist.copy()#copy方法创建一个新的列表对象,并将mylist中的元素复制到新的列表中,copy_mylist和mylist是两个不同的列表对象 print(f"复制后的list内容:{copy_mylist}") #深拷贝和浅拷贝的区别 import copy #举例 ori_list = [1, 2, [3, 4]] #浅拷贝就是创建一个新的列表对象,但其中的元素仍然是原来列表中的元素的引用,即新列表中的元素和原列表中的元素指向同一个对象,修改新列表中的元素会影响原列表中的元素 qian_copy_ori_list = copy.copy(ori_list) #打印浅拷贝的qian_copy_ori_list和原列表ori_list print(f"浅拷贝后的列表内容:{qian_copy_ori_list},原列表内容:{ori_list}") #现在修改浅拷贝列表中的元素,看看是否会影响原列表 qian_copy_ori_list[2][0] = 999 print(f"修改浅拷贝列表后的内容:{qian_copy_ori_list},原列表内容:{ori_list}") #可以看到,修改浅拷贝列表中的元素后,原列表中的元素也被修改了,因为浅拷贝只是复制了列表对象,但其中的元素仍然是原来列表中的元素的引用,所以修改新列表中的元素会影响原列表中的元素。 #所以浅拷贝在实际应用中,建议只在列表中没有嵌套列表或者其他可变对象时使用,否则可能会导致意外错误。 #copy常用的函数主要是以下内容:1.浅拷贝:copy.copy(),2.深拷贝:copy.deepcopy() #深拷贝 deep_copy_ori_list = copy.deepcopy(ori_list) #深拷贝是完全复制了原列表中的元素,不管是基本数据类型还是复杂数据类型,都会创建一个新的对象,所以修改深拷贝列表中的元素不会影响原列表中的元素。 #打印深拷贝的deep_copy_ori_list和原列表ori_list print(f"深拷贝后的列表内容:{deep_copy_ori_list},原列表内容:{ori_list}") #现在修改深拷贝列表中的元素,看看是否会影响原列表 deep_copy_ori_list[2][0] = 888 print(f"修改深拷贝列表后的内容:{deep_copy_ori_list},原列表内容:{ori_list}") deep_copy_ori_list[0] =666 print(f"修改深拷贝列表中的基本数据类型元素后的内容:{deep_copy_ori_list},原列表内容:{ori_list}") #可以看到,修改深拷贝列表中的元素后,原列表中的元素没有被修改,因为深拷贝完全复制了原列表中的元素,不管是基本数据类型还是复杂数据类型,都会创建一个新的对象,所以修改新列表中的元素不会影响原列表中的元素。 #所以深拷贝在实际应用中,建议在列表中有嵌套列表或者其他可变对象时使用,以避免意外错误。 #一般在实际应用中,浅拷贝远多于深拷贝,因为默认浅拷贝共享内存,极致提速省内存,但是要改数据、保原数据 → 请使用深拷贝 #多维列表的操作,多维列表就是列表嵌套列表,可以看作是一个矩阵或者表格,常见的操作有以下内容: #1.创建多维列表 multi_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]#这是一个二维列表,包含三个元素,每个元素都是一个列表 """最外层:一整个大列表 → 第 1 维 里面每一个元素还是列表 → 第 2 维 ,[[[[[几个方括号就是几维度,[[[[[[就是6维""" #可以直接打印列表的形状和维度 import numpy as np #numpy库是python中常用的科学计算库,提供了多维数组对象和各种操作多维数组的函数,可以方便地处理多维列表。 shape_multi_list = np.array(multi_list).shape#将多维列表转换为numpy数组,然后获取其形状 print(f"多维列表的形状:{shape_multi_list}")#多维列表的形状:(3, 3) #打印维度 print(f"多维列表的维度:{np.ndim(multi_list)}")#多维列表的维度:2 #打印np.array(multi_list)的内容 print(f"将多维列表转换为numpy数组后的内容:\n{np.array(multi_list)}")#将多维列表转换为numpy数组后的内容:[[1 2 3] [4 5 6] [7 8 9]] #打印np.array(multi_list).shape[0]的内容 print(f"将多维列表转换为numpy数组后的第一行内容:\n{np.array(multi_list).shape[0]}")#将多维列表转换为numpy数组后的第一行内容:[1 2 3] #2.访问多维列表中的元素 #打印第一维的所有元素 for i in range(np.array(multi_list).shape[0]): print(f"第一维的每一个元素:{multi_list[i]}") #打印第二维的所有元素 for i in range(np.array(multi_list).shape[0]):#第一维度,本示例第一维有3个列表元素 for j in range(np.array(multi_list).shape[1]): print(f"第二维的第一个元素:{multi_list[i][j]}")#访问多维列表中的元素,multi_list[i][j]表示访问第一维的第i个元素中的第二维的第j个元素 #列表中的 [:,:] 用法 test_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #使用切片操作访问多维列表中的元素,[:,:]表示访问所有行和所有列,即访问整个多维列表 #使用切片操作访问多维列表中的元素,只访问第一行和第二行中每一行的前两个元素,即1 2 和4 5 ,第三行不访问 for row in test_list[:2]: print(f"row:{row}")#访问多维列表中的元素,test_list[:2]表示访问第一行和第二行,即访问前两行的所有元素 print(f"row:{row[:2]}")