Skip to main content
 首页 » 编程设计

python之python中的矩阵乘法给出错误,我该如何克服这个问题

2025年05月04日20落叶无声

我正在尝试打印以下图案:

3 3 3 3 3 
3 2 2 2 3 
3 2 1 2 3 
3 2 2 2 3 
3 3 3 3 3 

我的 python 代码是:

def pattern(n): 
    d = n + (n - 1) 
    l = [[0 for row in range(d)] for col in range(d)] 
    for a in range(0, n): 
        for i in range(a, d): 
            for j in range(a, d): 
                l[a][i][j].append(n) 
        d -= 1 
        n -= 1 
 
 
print(pattern(3)) 

但我收到以下错误:

Traceback (most recent call last): 
File "test.py", line 10, in <module> 
  print(pattern(3)) 
File "test.py", line 7, in pattern 
  l[a][i][j].append(n) 
TypeError: 'int' object is not subscriptable 

谁能指导我如何克服这个问题?

提前谢谢你。

请您参考如下方法:

因为有点难以理解您的代码应该如何做它应该做的事情(抱歉!),这里有一个非常 Pythonic 的方法来生成像这样的矩阵作为生成器函数。

def pattern(n): 
    size = n * 2 - 1 
    n_1 = n - 1 
    for y in range(size): 
        yield [max(abs(x - n_1), abs(y - n_1)) + 1 for x in range(size)] 

我们的想法是,我们查看从 n - 1 生成的单元格的“距离”,它必须是网格的中心点(即 n * 2 - 1 项目宽和高)。

因为它是一个生成器函数,您可以通过调用例如从中获取列表列表列表(模式(大小))。

这是一个示例程序 –

for size in range(1, 6): 
    print(size) 
    for row in pattern(size): 
        print(row) 

——及其输出:

1 
[1] 
2 
[2, 2, 2] 
[2, 1, 2] 
[2, 2, 2] 
3 
[3, 3, 3, 3, 3] 
[3, 2, 2, 2, 3] 
[3, 2, 1, 2, 3] 
[3, 2, 2, 2, 3] 
[3, 3, 3, 3, 3] 
4 
[4, 4, 4, 4, 4, 4, 4] 
[4, 3, 3, 3, 3, 3, 4] 
[4, 3, 2, 2, 2, 3, 4] 
[4, 3, 2, 1, 2, 3, 4] 
[4, 3, 2, 2, 2, 3, 4] 
[4, 3, 3, 3, 3, 3, 4] 
[4, 4, 4, 4, 4, 4, 4] 
5 
[5, 5, 5, 5, 5, 5, 5, 5, 5] 
[5, 4, 4, 4, 4, 4, 4, 4, 5] 
[5, 4, 3, 3, 3, 3, 3, 4, 5] 
[5, 4, 3, 2, 2, 2, 3, 4, 5] 
[5, 4, 3, 2, 1, 2, 3, 4, 5] 
[5, 4, 3, 2, 2, 2, 3, 4, 5] 
[5, 4, 3, 3, 3, 3, 3, 4, 5] 
[5, 4, 4, 4, 4, 4, 4, 4, 5] 
[5, 5, 5, 5, 5, 5, 5, 5, 5] 

编辑:按照评论中的要求,这是一个简化版本,它不是生成器函数,也不使用列表理解:

def pattern_simple(n): 
    size = n * 2 - 1 
    n_1 = n - 1 
    rows = [] 
    for y in range(size): 
        row = [] 
        for x in range(size): 
            row.append(max(abs(x - n_1), abs(y - n_1)) + 1) 
        rows.append(row) 
    return rows