矩阵顺时针旋转90度

2024-04-24 12:37:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解决矩阵旋转90度的问题。在这个问题中,我使用了一个k列表,其中填充了用户传递的精确度数的0。你知道吗

我尝试了以下代码:

def rotate(m):
    k=[]
    f=[]
    print(m)
    for i in range(0,len(m)):
        f.append(0)
    for i in range(0,len(m)):
        k.append(f)
    print(k)
    for i in range(0,len(m)):
        for j in range(0,len(m)):
            print("REPLACING POSITION:",i,j )
            t=m[i][j]
            k[j][len(m)-i-1]=t
    return (k)
print(rotate([[1,2],[3,4]]))

我期望输出:

[[1, 2], [3, 4]]
[[0, 0], [0, 0]]
REPLACING POSITION: 0 0
REPLACING POSITION: 0 1
REPLACING POSITION: 1 0
REPLACING POSITION: 1 1
[[3, 1], [4, 2]]

我得到输出:

[[1, 2], [3, 4]]
[[0, 0], [0, 0]]
REPLACING POSITION: 0 0
REPLACING POSITION: 0 1
REPLACING POSITION: 1 0
REPLACING POSITION: 1 1
[[4, 2], [4, 2]]

为什么最后一排不停地重复?请帮忙。你知道吗


Tags: 代码用户in列表forlendefposition
2条回答

第一个循环生成列表f。 下一个for循环生成列表k,它意味着包含列表flen(m)副本。问题是f(大多数列表)只是指针。所以listk实际上是指向同一listf的指针列表。你知道吗

因此,对k中f的元素所做的所有修改都是对同一个列表进行的。你知道吗

一种解决方案是在使用slice操作符生成listk时使用listf副本

    for i in range(0,len(m)):
        k.append(f[:])

使用f.copy()获取列表的深度副本。你知道吗

    def rotate(m):
    k=[]
    f=[]
    print(m)
    for _ in range(0,len(m)):
        f.append(0)
    for _ in range(0,len(m)):
        k.append(f.copy())
    for i in range(0,len(m)):
        for j in range(0,len(m)):
            print("REPLACING POSITION:",i,j )
            t=m[i][j]
            k[j][len(m)-i-1]=t

            print(j,len(m)-i-1)           
    return k


print(rotate([[1,2],[3,4]]))

相关问题 更多 >