我有两个元组(它们也可以是列表),其元素是相关的。一个例子如下:
as = (a0, a1, a2, a3, a4)
bs = (b0, b1, b2, b3, b4)
同一个索引的元素被一起考虑:' a0'与' b0'和' a1'有关。与' b1'有关等
如果' a0'不是零,那么' b0'不能为零,反之亦然。
如何针对这两个元组中的所有元素测试此条件,以便相关对(a1, b1)
,(a2, b2)
等同样如此?
答案 0 :(得分:2)
ok = all((a and b) or (not a and not b) for a,b in zip(tuple1,tuple2))
这使用zip
来关联两个元组的值,在迭代结果时将它们作为一对返回。
评估每一对以查看它们是否为非零(True)或零(False)。
all
用于组合所有结果;如果任何一对返回False
,则结果为False
。
答案 1 :(得分:1)
你可以用izip
来解决这个问题from itertools import izip
...
for a, b in izip(tuple1, tuple2):
if not check(a, b)
return False
return True
# or as a one-liner
all(check(a, b) for (a, b) in izip(tuple1, tuple2))
check
可以按如下方式实现(n.b.我已经按字面意思采用了规范,并且比较为零而不是使用python truthyness):
def check(a, b):
return (a == 0) != (b == 0)
或者如果你知道元组只包含数字数据,你可以简化为:
def check(a, b):
return bool(a) != bool(b)
的文档