首页 > 解决方案 > 如何将列表更改为具有布尔值的字典

问题描述

我有以下代码。在这种情况下,我有一个大 O(n^2)。如何使用另一个 Big O 表示法以更好的方式编写此代码?如果列表中的一个值与另一个值匹配,则代码假定返回 True,否则它应该返回 False。

l1 = [1, 2, 3, 4]
l2 = [1, 6, 7, 8]

def common_inputs(list1, list2):
  for i in l1:
    for j in l2:
      if i == j:
        return True
      else:
        return False


print(common_inputs(l1, l2))

我有一个例子,但是是用 JavaScript 编写的,不能理解那么多。

array1 = [1, 2, 3, 4]
array2 = [1, 6, 7, 8]

function commonInputs(arr1, arr2) {
  let map = {};
  for (let i=0; i < arr1.length; i++) {
    if (!map[i]) {
      const item = arr1[i];
      map[item] = true;
    }
  }

  for (let j=0; j < arr2.length; j++) {
    if (map[arr2[j]]) {
        return true;
    }
  }
  return false;
}

任何建议将被认真考虑。提前致谢。

标签: javascriptpythonlistdictionarybig-o

解决方案


测试两组是否相交的python习语是

intersect = not set(a1).isdisjoint(a2)

在 javascript 中没有这样的东西,所以你必须循环第二个列表:

function intersect(a1, a2) {
    let s1 = new Set(a1)
    return a2.some(x => s1.has(x))
}

推荐阅读