Python学习笔记#4:快速生成二维矩阵的方法


普通方法:

最简单易懂的方法,这种逻辑不仅适用于 python,也适用于任何变成语言。

row = 5
col = 8
matrix = []

for i in range(row):
    m = []
    for j in range(col):
        m.append(False)
    matrix.append(m)


# 矩阵打印函数
def showMatrix():
    for i in range(row):
        for j in range(col):
            print(matrix[i][j], end="\t")
        print()


showMatrix()
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
showMatrix()
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
更改 matrix[1][1] 的值为 True
False   False   False   False   False   False   False   False
False   True    False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False

简洁方法

列表解析是python的一大特点,它能够是代码更加简洁易懂。

row = 5
col = 8
matrix = [[False] * col for i in range(row)]


# 矩阵打印函数
def showMatrix():
    for i in range(row):
        for j in range(col):
            print(matrix[i][j], end="\t")
        print()


showMatrix()
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
showMatrix()
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
更改 matrix[1][1] 的值为 True
False   False   False   False   False   False   False   False
False   True    False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False

错误的方法

row = 5
col = 8
matrix = [[False] * col] * row

# 矩阵打印函数
def showMatrix():
    for i in range(row):
        for j in range(col):
            print(matrix[i][j], end="\t")
        print()

showMatrix()
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
showMatrix()

可以看到,如果不使用列表解析,改变一行的任意一列,那么每一行的该列都会改变。

False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
False   False   False   False   False   False   False   False
更改 matrix[1][1] 的值为 True
False   True    False   False   False   False   False   False
False   True    False   False   False   False   False   False
False   True    False   False   False   False   False   False
False   True    False   False   False   False   False   False
False   True    False   False   False   False   False   False

什么原因呢?
我们打出每一行列表的地址

def showMatrix():
    for i in range(row):
        print(id(matrix[i]))
        
showMatrix()

会发现每一行列表的地址都是一样的。说明他们都指向同一个内存地址,所以如果该地址的内容发生改变,那么所有指向该地址的列表都会发生改变。

51683496
51683496
51683496
51683496
51683496

如果我们使用列表解析

row = 5
col = 8
matrix = [[False] * col for i in range(row)]

那么每一行列表就相当于独立保存的

51488776
51486920
51486760
51486792
51486824

我们在生成矩阵的时候,一定要用列表解析的方式生成矩阵。

高级方法

使用numpy包可以直接生成举矩阵,这里使用的是numpy的full函数,因为这种函数生成非数字矩阵的时候比较方便。

import numpy as np
matrix = np.full(shape=(5, 8), fill_value=False)

print(matrix)
print("更改 matrix[1][1] 的值为 True ")
matrix[1][1] = True
print(matrix)
[[False False False False False False False False]
 [False False False False False False False False]
 [False False False False False False False False]
 [False False False False False False False False]
 [False False False False False False False False]]
更改 matrix[1][1] 的值为 True
[[False False False False False False False False]
 [False  True False False False False False False]
 [False False False False False False False False]
 [False False False False False False False False]
 [False False False False False False False False]]
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值