比较多个列表的第n个元素

时间:2014-06-10 15:08:53

标签: python

我有两个元组(它们也可以是列表),其元素是相关的。一个例子如下:

as = (a0, a1, a2, a3, a4)
bs = (b0, b1, b2, b3, b4)

同一个索引的元素被一起考虑:' a0'与' b0'和' a1'有关。与' b1'有关等

如果' a0'不是零,那么' b0'不能为零,反之亦然。

如何针对这两个元组中的所有元素测试此条件,以便相关对(a1, b1)(a2, b2)等同样如此?

2 个答案:

答案 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)

但请记住python truth testing can catch beginners out.

izip

的文档