首页 > 解决方案 > 判断两个列表是否相互补充的最快方法?

问题描述

我有两个数组:

a = [0,1,0,1,0,1,0,1]
b = [1,0,1,0,1,0,1,0]

确定每个元素是否与另一个元素相反(补码)的最快方法是什么?

因此,为了清楚起见,上述内容将返回True

但对于这些数组:

a = [1,1,0,1,0,1,0,1]
b = [1,0,1,0,1,0,1,0]

它会回来False

我认为这个问题很清楚,但更多细节:

标签: pythonpython-3.xlistxor

解决方案


您可以压缩列表以比较这些对。为了知道它们是否“互补”,因为您的所有值都是 1 或 0,只需检查它们的总和是否为 1:

a = [0,1,0,1,0,1,0,1]
b = [1,0,1,0,1,0,1,0]

all(va + vb == 1 for va, vb in zip(a, b))
# True

a = [1,1,0,1,0,1,0,1]
b = [1,0,1,0,1,0,1,0]

all(va + vb == 1 for va, vb in zip(a, b))
# False

请注意,all与生成器表达式一起使用只会检查需要决定的内容,一旦遇到无效的对,它将立即停止。


推荐阅读