python - 判断两个列表是否相互补充的最快方法?
问题描述
我有两个数组:
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
我认为这个问题很清楚,但更多细节:
“最快”是指速度方面最快(以秒为单位)
数组的长度不限于八位,但数组中的元素数量将相同
元素将始终是
0
或者1
我期望偶数个非补码和补码数组
解决方案
您可以压缩列表以比较这些对。为了知道它们是否“互补”,因为您的所有值都是 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
与生成器表达式一起使用只会检查需要决定的内容,一旦遇到无效的对,它将立即停止。
推荐阅读
- amazon-web-services - AWS CodeDeploy 导出数据库凭证
- elasticsearch - 如何在搜索查询中匹配文档中的所有单词?
- python - PyCharm 中的模块导入失败
- typescript - 返回 TypeORM 和 MySQL 中插入查询的 ID
- python - 过滤掉周末后使用 Pandas 重新采样
- r - 如何为 R 字符对象分配名称
- java - 为什么在这种情况下没有实现android java变量类?
- powershell - 制作批处理文件时遇到问题
- android - 英雄动画上的 RenderFlex 溢出 - Flutter
- machine-learning - 多项式与 argmax 评估准确性的意义何在?