版本:python3.7。
笔记来源于B站小甲鱼教程
浅拷贝和深拷贝
浅拷贝
通过赋值拷贝出的列表y与x列表的存储位置一致,会随着x的修改而跟着改变
>>> x=[1,2,3]
>>> y=x
>>> y
[1, 2, 3]
>>> x[1]=4#修改元素
>>> x
[1, 4, 3]
>>> y
[1, 4, 3]#y一起被修改
>>> #深拷贝和浅拷贝
>>> #不同的物理还是得通过拷贝来进行
>>> y=x[:]#赋值一下
>>> y
[1, 1, 3]
>>> x[1]=2
>>> y
[1, 1, 3]#y一起被修改
>>> #浅拷贝拷贝的只是其引用
>>> import copy
>>> x=[[1,2,3],[4,5,6],[7,8,9]]
>>> y=copy.copy(x)#模块.函数()
>>> x[1][1]=0#修改x
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]#y改变
深拷贝-copy模块
深拷贝引入copy模块,deepcopy()函数
>>> import copy
#deepcopy函数
>>> x=[[1,2,3],[4,5,6],[7,8,9]]
>>> y=copy.deepcopy(x)
>>> x[1][1]=0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]#y没有跟着改变
列表推导式
>>> o=[1,2,3,4,5]
>>> for i in range(len(o)):
o[i]=o[i]*2#数值乘2
>>> o
[2, 4, 6, 8, 10]
>>> o=[1,2,3,4,5]
>>> o=[i*2 for i in o]
>>> o
[2, 4, 6, 8, 10]
>>> #以上是列表推导式
>>> #基本语法:[expression for target in interable]
>>> x=[i for i in range(10)]
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x=[i+1 for i in range(10)]
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x=[]
>>> for i in range(10):
x.append(i+1)
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> y=[c*2 for c in "fishc"]#字符串乘2
>>> y
['ff', 'ii', 'ss', 'hh', 'cc']
>>> code=[ord(c) for c in "fishc"]#字符串转码
>>> code
[102, 105, 115, 104, 99]
>>> #ord():将字符转为unicode编码
>>> matrix=[[1,2,3],[4,5,6],[7,8,9]]
>>> col2=[row[1] for row in matrix]#获取第二列元素
>>> col2
[2, 5, 8]
>>> diag=[matrix[i][i] for i in range(len(matrix))]#获取
>>> S=[[0]*3 for i in range(3)]
>>> S
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> #测试是不是非引用同一个元素构成列表,使用修改某一下标元素的方法
>>> S[1][1]=1
>>> S
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
>>> #没有全部改变,创建成功
>>> even=[i for i in range(10) if i%2==0]
>>> even
[0, 2, 4, 6, 8]
>>> #测试是先运行左边还是右边,对第一个i进行修改
>>> even=[i+1 for i in range(10) if i%2==0]
>>> even
[1, 3, 5, 7, 9]
>>> #先执行for再执行if
>>> words=["great","fishc","adourable"]
>>> fwords=[w for w in words if w[0]=="f"]
>>> fwords
['fishc']
>>> #筛选出f开头的单词,使用下标索引==f的方法
>>> matrix=[[1,2,3],[4,5,6],[7,8,9]]
>>> #把matrix展开:
>>> flatten=[col for row in matrix for col in row]
>>> flatten
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> #row 行
>>> flatten=[]
>>> for row in matrix:
for col in row:
flatten.append(col)
>>> flatten
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> #用字符来体现:
>>> [x+y for x in "fishc" for y in "FISHC"]
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']
>>> #以上为笛卡尔乘积
>>> _=[]
>>> #无关紧要的变量名可以用下划线来表示
>>> for x in"fishc":
for y in "FISHC":
_.append(x+y)
>>> _
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']
#用数字来体现:
>>> [[x,y] for x in range(10) if x%2==0 for y in range(10) if y%3==0]
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
#for 和 if 语句要分行写加冒号
#循环表示:
>>> for x in range(10):
if x%2 == 0:
for y in range(10):
if y%3 == 0:
_.append([x,y])
>>> _
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
>>>
#程序设计原则:KISS原则:简洁胜于复杂
#谋定而后动,知止而有得