python 中的元组元素之间的逻辑或运算

Logical OR operation between tuple elements in python

我正在尝试在 元组中的元素之间进行逻辑或运算。

row = [(1,1,0),(0,0,1)]
num = []
for element in row:
   num= (num or element)
print num

我期待输出 num = [(1,1,1)] 但我得到 num = [(1,1,0)].

请建议在元素之间执行 OR 运算的合适方法。

你可以试试这个,

tuple((i or j) for i,j in zip(row[0], row[1]))

>>> num = []
>>> k = []
>>> for i, j in zip(row[0], row[1]):
     k.append(i or j)


>>> num.append(tuple(k))
>>> num
[(1, 1, 1)]
>>> 

您使用的逻辑不正确,因为它迭代了整个元组,因此在您 运行 命令时将第一个元组作为输出。正如 Avinash 所给出的那样,您将必须遍历元组中的每个单独元素并将它们并排匹配。如果您使用 python2,我会推荐 itertools 中的 izip 函数,否则在 python3 中,简单的 zip 函数就足够了。

python2:

import itertools
num = tuple(i or j for i, j in itertools.izip(row[0], row[1]))

python3:

num = tuple(i or j for i, j in zip(row[0], row[1]))

你得到(1,1,0)的原因是因为short-circuting,也因为你的代码。让我为你分解一下。

第一次迭代:

num == []
element == (1,1,0)
num or element == (1,1,0)
num == (1,1,0)             # due to assignment to num

第二次迭代:

num == (1,1,0)             # value from previous iteration
element == (0,0,1)         # 2nd value of row
num or element == (1,1,0)  # due to Short circuiting
num == (1,1,0)             # due to "assignment" to num, in contrast to appending

所以,num(1,1,0) 结尾。

解决方案

你可以做什么 。这是另一种方法:

row = [(1,1,0),(0,0,1)]
result = tuple(row[0][i] or row[1][i] for i in range(3))
print(result)

输出:

(1, 1, 1)