【问题标题】:Find index of changing value between two arrays查找两个数组之间变化值的索引
【发布时间】:2019-02-02 18:12:13
【问题描述】:

我可以通过比较两个数组找到更改值的索引吗?

例如;

array1 = [1, 2 ,3]
array2 = [1, 2, 4]

我想通过比较这两个数组来找到变化值的索引。对于这个例子,这应该是2

我正在使用 numpy 来比较两个数组。但我找不到更改值的索引。

【问题讨论】:

    标签: python arrays python-3.x numpy


    【解决方案1】:

    这是一个非 numpy 解决方案。您可以将enumerate()zip() 一起使用:

    array1 = [1,2,3]
    array2 = [1,2,4]
    
    print([i for i, (x, y) in enumerate(zip(array1, array2)) if x != y])
    # [2]
    

    【讨论】:

      【解决方案2】:

      由于您使用的是 NumPy,因此您可以使用 != 运算符和 np.flatnonzero 进行比较:

      array1 = np.array([1,2,3])
      array2 = np.array([1,2,4])
      
      res = np.flatnonzero(array1 != array2)
      
      print(res)
      # array([2], dtype=int64)
      

      【讨论】:

        【解决方案3】:

        你可以使用 numpy 的 where 函数来做到这一点

        array3 = np.where((array1-array2) != 0)
        

        【讨论】:

          【解决方案4】:

          要查找两个列表之间的 n 个变化元素的索引,我们可以使用

          c = set(a) - set(b)
          [a.index(i) for i in c]
          

          【讨论】:

          • 这不起作用。如果同一个元素可以出现两次,它可以找到错误的索引。如果列表在不同位置具有相同的元素,它也不起作用。即使它有效,这也是非常低效的。每个不匹配的元素都需要一个循环(index 调用)。
          【解决方案5】:

          list(set(a1)-set(a2)) 给出集合 a2 中不存在的所有元素的列表

          a1 = [1,2,3]
          a2 = [1,2,4]
          arr=list(set(a1)-set(a2)) #arr=[3]
          print(a1.index(arr[0]))   #2
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-05-17
            • 1970-01-01
            • 1970-01-01
            • 2012-01-12
            • 2017-11-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多