用于就地更改列表的函数

时间:2018-11-27 17:37:07

标签: python

我想更改列表中两个列表的位置。 像这样:

A = [[2,3,4], [5,-3,6]]
swap(A[0], A[1])
print(A)
#[[5,-3,6],[2,3,4]]

这不起作用(为什么?):

def swap(row1,row2):
 temp = row2
 row2 = row1
 row1 = temp

这可行(为什么?):

def swap(row1,row2):
    for i in range(0,len(row2)):
     temp = row2[i]
     row2[i] = row1[i]
     row1[i] = temp

1 个答案:

答案 0 :(得分:0)

Python按值传递引用。在您的第一个函数中,您传递对row1row2的引用,切换这些引用,但这不会改变外部的列表。

如果要交换这样的列表中的元素,则应将列表传递进来,以便修改列表中的引用:

def swap(mylist):
    mylist[0], mylist[1] = mylist[1], mylist[0]

# This works for a list of ints
this_list = [1, 2]
swap(this_list)
this_list
# [2, 1]

# Or for a list of lists (Note that the lengths aren't the same)
that_list = [[1, 2, 3], [4, 5]]
swap(that_list)
that_list
# [[4, 5], [1, 2, 3]]

(另外,值得注意的是,您可以使用python进行多个分配,因此您无需使用temp变量。)