我正在尝试在元素里面元组之间进行逻辑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操作。
答案 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)