我正在尝试在函数中交换局部变量,以将2 x 2矩阵旋转90度。
def twobytwo(m):
last = len(m)-1
for i in range(0, last):
swap(m[i][i], m[i][last])
swap(m[i][i], m[last][last])
swap(m[i][i], m[last][i])
return m
def swap(i, j):
temp = i
i = j
j = temp
print(twobytwo([[0, 1], [2, 3]]))
当前,我返回了原始矩阵,但我想查看
[[2,0],[3,1]]
答案 0 :(得分:1)
我认为这是您想要实现的目标:
def twobytwo(m):
last = len(m)-1
for i in range(0, last):
m[i][i], m[i][last] = m[i][last], m[i][i]
m[i][i], m[last][last] = m[last][last], m[i][i]
m[i][i], m[last][i] = m[last][i], m[i][i]
return m
print(twobytwo([[0, 1], [2, 3]]))
编辑:
如果您仍然想维护功能swap
:
def swap(i, j):
return j, i
a, b = swap(a, b)
但是我认为a, b = b, a
足够好。
答案 1 :(得分:0)
您的假设是对swap()参数进行了适当修改(即按引用传递)。 Python在您的代码中没有这样做:当您调用诸如swap(m [i] [i],m [i] [last])之类的代码时,它将取消引用m的值并调用swap(0,1)。所以swap()只修改i,j;它不会修改您的“矩阵”(从技术上讲是一个列表列表)。
尝试重写您的swap()函数以获取“矩阵”以及两对索引:(i,j)和(k,l)。