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

时间:2016-11-01 04:04:05

标签: python python-2.7 tuples logical-operators

我正在尝试在元素里面元组之间进行逻辑OR运算。

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操作。

3 个答案:

答案 0 :(得分:1)

你可以试试这个,

public ActionResult Index(MyModel model)
{
    if(!Enum.IsDefined(typeof(MyEnum), model.EnumType ?? 0))
    {
        return RedirectToAction("Index", "Home");
    }           
    return View();
}

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

答案 1 :(得分:0)

您使用的逻辑不正确,因为迭代整个元组,因此在运行命令时将第一个元组作为输出。正如Avinash所给出的,您将不得不迭代元组中的每个元素并将它们并排匹配。我建议在itertools中使用izip函数,如果你在python3中使用python2,那么简单的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]))

答案 2 :(得分:0)

您获得(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)结束。

解决方案

你可以做Avinash Raj showed。这是另一种方法:

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)