我试图在两个列表之间交换元素,而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]
答案 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