首页 > 解决方案 > 使用 python 进行数组旋转(顺时针 90 度)- 理解列表副本时遇到问题

问题描述

嗨,我是 python 新手,需要帮助制作列表副本!

def rotate(lst):
    a=lst[:] 
#a=lst[:] / =lst.copy() / =[x for x in lst] e.t.c does not work but a=[[0,0,0],[0,0,0],[0,0,0]] works # # # how? 
    for i in range(len(lst)):
        for j in range(len(lst)):
            a[j][i]=lst[len(lst)-i-1][j]
    return a
lst=[[1,2,3],[4,5,6],[7,8,9]]

print(rotate(lst))
print(lst)

预期答案(当 a=[[0,0,0],[0,0,0],[0,0,0]] 时获得):

[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

使用 a=lst[:] | 得到的答案 一个 =lst.copy() | a =[x for x in lst]

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[7, 8, 7], [8, 5, 8], [9, 6, 7]]
[[7, 8, 7], [8, 5, 8], [9, 6, 7]]

a=[[0]*len(lst)]*len(lst) 也给出了错误的答案,即使它本质上意味着 a=[[0,0,0],[0,0,0],[0,0 ,0]])

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[9, 6, 3], [9, 6, 3], [9, 6, 3]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

为什么会这样?为什么深拷贝在这种情况下不起作用?

标签: pythonarrays

解决方案


推荐阅读