【问题标题】:swapping two elements between two lists in python [duplicate]在python中的两个列表之间交换两个元素[重复]
【发布时间】:2018-05-16 20:03:15
【问题描述】:

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

【问题讨论】:

  • 你怎么称呼swap?贴出调用者的代码。
  • 注意这里和A[i], B[j] = B[j], A[i]是一样的
  • 你能举一个输入输出的例子吗?
  • 您的功能似乎正在运行。这是它交换列表中的两个项目的图像。 imgur.com/a/knanR
  • 我确认它与 numpy.array 有关。我可以重现。而且它只适用于二维数组。

标签: python


【解决方案1】:
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

【讨论】:

    【解决方案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]))
    

    【讨论】:

      【解决方案3】:

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

      Here is a similar question I found.

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

      【讨论】:

      • 等等,我的索引出了点问题,但会修复
      • 我觉得它已经足够不同了,因为我有点努力适应另一个答案以在数组之间交换而不是在同一个数组中交换。不过,我不经常使用 numpy。
      • 我居然找到了完全相同的,它是stackoverflow.com/questions/14933577/…的副本
      猜你喜欢
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2018-08-17
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多