【问题标题】:checking two arrays in python which has two same value in an array检查python中的两个数组,它们在一个数组中有两个相同的值
【发布时间】:2021-12-28 08:20:42
【问题描述】:

我有两个数组,我试图找到在第一个数组中但不在第二个数组中的值。但是,有一个问题,虽然第一个数组有两个b,但由于另一个数组只有一个b,所以它看到它是相同的,并给出没有区别的输出。我该如何解决这个问题?

x = ["a","b","b"]
y = ["a","b"]

print(set(x)-set(y))

【问题讨论】:

  • 一种方法是遍历一个数组,获取数组中每个值的计数,然后对第二个执行相同的操作。然后,遍历第一个数组的每个值及其计数,并检查第二个数组的每个值是否具有相同的计数。

标签: python arrays python-3.x list python-2.7


【解决方案1】:

这应该可以解决问题

 for i in y:
     if (i in x):
         x.remove(i)
 print(x)

【讨论】:

  • 这有一个 O(n^2) 复杂度,当数组很大时可能太多了
  • 我同意,为了快速编写脚本,这应该可行。不推荐用于大型工作流程。
【解决方案2】:

试试这个:

from collections import Counter

res = [k for k, v in (Counter(x) - Counter(y)).items() for _ in range(v)]

这种方法的复杂性是你能得到的最好的(即 O(n))。

例子:

>>> x = [1,2,2,2,3,4,5]
>>> y = [1,2,4]
>>> res = [k for k, v in (Counter(x) - Counter(y)).items() for _ in range(v)]
>>> res
[2, 2, 3, 5]

使用这种方法,您将失去元素的顺序。如果你的情况不好,请告诉我。

【讨论】:

    【解决方案3】:

    我的方法是列表理解:

    x = ["a","b","b"]
    y = ["a","b"]
    
    [x.remove(element) for element in y if element in x]       
    

    输出:

    ['b']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多