在python中交换两个列表之间的两个元素

时间:2017-12-03 03:39:11

标签: python

我试图在两个列表之间交换元素,而python似乎并没有让它发生。

def swap(A,B,i,j):
    TEMP_B = B[j]
    B[j] = A[i]
    A[i] = TEMP_B
    return A,B

X = np.array([[1.25,3],[1.5,2],[2,2.75],[2.25,2],[2,0.5],[3.25,0.75],
[3.5,2.25],[4.25,0.75]])
Y = np.array([[2.75,3.5],[3.25,3],[4.5,2.75],[3.5,4.75]])
X,Y = swap(X,Y,1,1)
OUTPUT:::
Temp = [ 3.25  3.  ]
before swap
X[ 1 ]: [ 1.5  2. ]
Y[ 1 ]: [ 3.25  3.  ]
Temp = [ 1.5  2. ]
after swap
X[ 1 ]: [ 1.5  2. ]
Y[ 1 ]: [ 1.5  2. ]

我希望B [j] =旧A [i]和A [i] =旧B [j] 但是,只有一个项目被交换..不确定是什么问题。 这是它得到的输出:

我期待X [1] = [3.25,3],但它出现为[1.5,2]

3 个答案:

答案 0 :(得分:2)

如果使用NumPy数组,您可以使用.copy()

def swap(A,B,i,j):
    TEMP_B = B[j].copy()
    B[j] = A[i]
    A[i] = TEMP_B
    return A,B

应该在1d或2d阵列上工作。

A = np.arange(5)
B = np.arange(5, 10)
swap(A, B, 1, 1)
# (array([0, 6, 2, 3, 4]), 
#  array([5, 1, 7, 8, 9]))

答案 1 :(得分:1)

这不是来自适用于常规数组的swap函数它与您使用numpy.array的事实有关。

Here is a similar question I found.

你需要做TEMP_B = np.copy(B[j]),因为Numpy懒洋洋地复制数据。

答案 2 :(得分:0)

l1 = [1, 2, 3]
l2 = ['a', 'b', 'c']

print(l1, l2)
l1[1], l2[2] = l2[2], l1[1]
print(l1, l2)

本质上:

list1[i], list2[j] = list2[j], list1[i]
a, b = b, a