1。列表的加法与乘法
加法
s=[1,2,3]
t=[4,5,6]
s+t
s+t
[1, 2, 3, 4, 5, 6]
乘法
s*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
2.二维列表(矩阵)
第一种表示:
matrix=[[1,2,3],[4,5,6],[7,8,9]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
第二种
matrix=[[1,2,3],
[4,5,6],
7,8,9]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3.访问列表里的元素(一位列表用一次循环,二维列表用两次循环)
代码1:
for i in matrix:
for each in i:
print(each)
1
2
3
4
5
6
7
8
9
代码2:
for i in matrix:
for each in i:
print(each,end=" ")
print() #换行
结果:
1 2 3
4 5 6
7 8 9
4.访问列表元素
matrix[0]
[1, 2, 3]
matrix[0][0]
1
matrix[1][1]
5
matrix[2][2]
9
5.列表的扩充(一维列表到二维列表的生成)
A=[0]*3
A
[0,0,0]
for i in range(3):
A[i]=[0]*3 #这个地方的矩阵A已经经过了扩充等于是一维列表通过迭代成为二维列表。
A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
下面的做法为错误的做法:
B=[[0]*3]*3
B
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
修改矩阵的值
A[1][1]=1
A
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
B[1][1]=1
B
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
5.1二维列表的生成
生成10*10的二维列表,列表所有元素初始化为1
matrix = []
for i in range(10):
matrix.append([])
for j in range(10):
matrix[i].append(1)
6.is的用法
x=“fishc”
y=“fishc”
x is y
True
字符串和数字在列表中存储方式不同
x=[1,2,3]
y=[1,2,3]
x is y
False
接上面A,B矩阵
A=[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
B=[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
A,B矩阵由于得到的方式不同,所以矩阵里面元素存储的方式也不同。
A的第一行和第二行元素相同,但显示的是False,说明了,它们没有放在同一个内存地址里面。
A[0] is A[1]
False
A[1] is A[2]
False
矩阵B的问题在于试图通过乘号对一个嵌套列表进行拷贝(这种方法是错误的),但其实,它拷贝的只是对同一个列表的引用,所以它的内存布局如上图所示。
B[0] is B[1]
True
B[1] is B[2]
True
6.获取矩阵的行数和列数
matrix=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
m=len(matrix)
n=len(matrix[1])
print("行数:",m,"列数:",n)
答:行数: 3 列数: 4
7.二维矩阵的转置(3*4列表的转置)
matrix=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
#Tmatrix=[[i]*3 for i in range(3)] 列表推导式创建二维列表3*3
#创建二维列表,并初始化为0
Tmatrix=[]
for i in range(4):
Tmatrix.append([])
for j in range(3):
Tmatrix[i].append(0)
#矩阵的转置
for i in range(len(matrix)):
for j in range(len(matrix[0])):
Tmatrix[j][i]=matrix[i][j] #错误写法Tmatrix[i][j]=matrix[j][i] matrix[3][0]取不到
print(Tmatrix)
列表推导式的方法
Tmatrix=[[matrix[j][i] for j in range((len(matrix)))] for i in range((len(matrix[0])))]
print(Tmatrix)
课后题:
0.请问 == 运算符和 is 运算符有什么区别呢?
答:== 运算符用于判断两个变量的值是否相等,而 is 运算符用于判断两个变量是否为同一对象。
[[1, 2, 3], [4, 5, 6]] + [7, 8, 9]
答:[[1, 2, 3], [4, 5, 6], 7, 8, 9]
答:3
3. 请问下面代码的结果是返回 True 还是 False 呢?
a = 250
b = 250
a is b
答:返回 True。
解析:出于性能优化方面的考虑,Python 在内部为 -5~256 范围内的整数维护了一个数组,起到缓存的作用。
这样,每次你试图创建一个 -5~256 范围内的整数时,Python 都会从这个数组中返回相对应的引用,而不是重新开辟一块新的内存空间存放。
4.请问下面代码的结果是返回 True 还是 False 呢?
a = 1000
b = 1000
a is b
返回 False。
如果超过了 -5~256 这个范围(大家可以自己动手测试一下),比如 1000,那么 Python 会为两个 1000 单独开辟两块不同的内存区域,因此 a is b 的结果为 False。
>>> three = [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
... [[1, 1, 1], [1, 1, 1], [1, 1, 1]],
... [[2, 2, 2], [2, 2, 2], [2, 2, 2]]]
课后题来自小甲鱼: 列表IV