如何在python中的函数内交换两个局部变量

时间:2019-01-18 00:10:37

标签: python arrays matrix data-structures

我正在尝试在函数中交换局部变量,以将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]]

2 个答案:

答案 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)。