最近又颓了很久,论文数据整理没思路,整理不下去了,还是继续学python吧。
今天终于终于学完了b站上的列表,太多知识点了,321开始!
1.列表的简单运算
①加(即+拼接)
s=[1,2,3]
t=[4,5,6]
s+t
>>>[1,2,3,4,5,6]
②乘
s*3
>>>[1,2,3,1,2,3,1,2,3]
2.嵌套列表
①列表的嵌套
s=[[1,2,3],[4,5,6],[7,8,9]]
②访问嵌套列表
Ⅰ循环法:
for i in s:
for each in i:
print(each)
Ⅱ下标法:
s[0] >>>[1,2,3]
s[0][0] >>>1
③循环创建嵌套列表:
Ⅰ循环法:
A=[0]*3
for i in range(3):
A[i]=[0]*3
>>>A : [[0,0,0],[0,0,0],[0,0,0]]
Ⅱ列表的乘:
B=[[0]*3]*3
>>>B : [[0,0,0],[0,0,0],[0,0,0]]
注意:差别在于修改元素时,B修改的是每一行第n个元素,而A修改的只是单个元素。
B[1][1]=1 >>> [[0,1,0],[0,1,0],[0,1,0]]
A[1][1]=1 >>> [[0,0,0],[0,1,0],[0,0,0]]
3.is函数(判断A和B是否相等)
例如:
A="ABC"
B="ABC"
A is B >>>True
x=[1,2,3]
y=[1,2,3]
x is y >>>False
因为变量不是盒子,而是引用:例如x=[1,2,3],y=x。相当于x指向存放[1,2,3]的地址,而这个地址给了y。
4.浅拷贝和深拷贝
深拷贝:无论怎么改动新列表(一维or多维),原列表都不变。
浅拷贝就是,对于多维列表,只是第一维深拷贝了,内层的元素改变了,原列表也会变。因此,主要体现在多维列表的差别上!!
①浅拷贝:
Ⅰcopy方法
例如:
x=[1,2,3]
y=x.copy()
x[1]=1
>>> x : [1,1,3]
>>> y : [1,2,3] 注意1:copy只是拷贝整个列表对象。
注意2:copy对于嵌套对象无效
例如:
x=[[1,2,3],[4,5,6],[7,8,9]]
y=x.copy()
x[1][1]=0
>>> x: [[1,2,3],[4,0,6],[7,8,9]]
>>> y: [[1,2,3],[4,0,6],[7,8,9]] 因为拷贝的是列表外层对象,即引用。
Ⅱ切片
y=x[:] 同上述copy方法
Ⅲcopy函数
import copy
x=[[1,2,3],[4,5,6],[7,8,9]]
y=copy.copy(x)
②深拷贝
import copy
x=[[1,2,3],[4,5,6],[7,8,9]]
y=copy.deepcopy(x)
这时候x改变,y就不为所动了,还是原来的值。
5.列表推导式(最难)
①一维列表:
Ⅰ oho=[1,2,3,4,5]
for i in range(len(oho)):
ono[i]=i*2
>>>oho : [2,4,6,8,10] 相当于列表推导式的:
oho=[i*2 for i in oho]
Ⅱ oho=[i for i in range(10)]
解释:range(10)取0~9的数,存到i中,再看表达式i,因此,oho:[0,1,2,3,4,5,6,7,8,9]
Ⅲ x=[i+1 for i in range(10)] 相当于:
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"]
>>>y : ["FF","ii","ss","hh","CC"]
Ⅴ转编码:
code=[ord(c) for c in "FishC"]
>>>code:[70,105,104,67,33]
②多维列表:
Ⅰmatrix=[[1,2,3],
[4,5,6],
[7,8,9]]
col2=[row[1] for row in matrix]
>>>col2:[2,5,8] 解析:通过for语句获取matrix的每一行,存放在col2中的是每一行的第二个元素,即row[1]。
Ⅱdiag=[matrix[i][i] for i in range(len(matrix))]
>>> diag: [1,5,9]
循环和列表推导式的区别是:循环是通过迭代来逐个修改原列表中的元素,而列表推导式是直接创建一个新的列表,然后再赋值为原先的这个变量名。
Ⅲ创建二维列表
s=[[0]*3 for i in range(3)]
相当于:
for i in range(3):
s[i]=[0]*3
③筛选(列表推导式加if)
Ⅰ even=[i for i in range(10) if i%2==0]
>>> even:[0,2,4,6,8] 解析:先执行for i in range(10),再执行if i%2==0,最后执行i
Ⅱ words=["Great","FishC","Pear","Apple","Blue"]
要求:筛选“F”开头的单词
fwords=[w for w in words if w[0]="F"]
>>>w:"FishC"
④嵌套
Ⅰ将二维列表降维
matrix=[[1,2,3], [4,5,6],[7,8,9]]
flatten=[col for row in matrix for col in row] 相当于:
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"] 相当于:
_=[]
for x in "fishc":
for y in "FishC":
_.append(x+y)
>>>_:["fF","fi","fs".......]
⑤终极形式,for 和 if一起嵌套:
例如:
[[x,y] for x in range(10) if x%2==0 for y in range(10) if y%3==0]相当于:
_=[]
for x in range(10):
if x%2==0:
for y in range(10):
if y%3==0:
_.append([x,y])
列表终于终于结束了,可太不容易了呜呜呜!