适用于任意数据结构的交换方法

0 投票
2 回答
865 浏览
提问于 2025-04-17 12:22

我在用Python实现自己的swap()方法时遇到了这个问题。

def swap(a,b):
    temp=a
    a=b
    b=temp

list_=[5,4,6,3,7]
swap(list_[4],list_[2])

我本以为调用swap()后,list_会被更新,因为在函数调用时,list_[4]list_[2]会被赋予新值。然而,list_却没有变化:

list_
   [5, 4, 6, 3, 7]

我搞不懂为什么调用swap函数时处理的是一个副本。我不想在我的swap函数中添加一个列表参数,也不想在swap()调用时返回这个列表,因为我希望这个方法能够适应其他数据结构,比如在

 swap(mat[0][1],mat[2,3])

2 个回答

5

在Python中,传递的是值,所以交换操作不会影响原来的列表。你只需要使用下面的代码:

list_[4], list_[2] = list_[2], list_[4]
8

你对Python的工作原理有些误解:

list_=[5,4,6,3,7]
swap(list_[4],list_[2]) # this is absolutely the same as
swap(7,6)

Python的基本概念是名字和数值的使用。当你在代码中写下一个名字时,它代表的是在运行时与之关联的数值。在这个例子中,list_[4]是一个名字,它代表的数值是7

当你想要改变某个东西时,必须使用它的名字之一。在这里,你想要改变list_,所以你需要这样做:

def swap(data, i1, i2):
    data[i1], data[i2] = data[i2], data[i1]

swap(list_, 4,2) # swaps list index 4 and 2

撰写回答