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)
我正在尝试在 元组中的元素之间进行逻辑或运算。
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)