大多数pythonic方式'或'元组?

Mr_*_*s_D 1 python tuples python-2.7 iterable-unpacking

我有一个方法返回一个布尔值的三元素元组,我在循环中调用它.我想最终得到一个包含or单个元组结果的三元素元组.如果该方法只返回一个布尔值,它将只是:

result = False
for j in some_list: # there is more processing in the loop, omitted
    result |= method(j)
return result
Run Code Online (Sandbox Code Playgroud)

我可以用一些优雅的方式或method()现在返回的元组来概括它吗?我当然可以这样做:

result = False, False, False
for j in some_list:
    res1, res2, res3 = method(j)
    result = res1 | result[0], res2 | result[1], res3 | result[2]
return result
Run Code Online (Sandbox Code Playgroud)

但似乎有点不雅.

编辑:澄清我想在两种情况下返回结果 - 首先是布尔值,然后是布尔值元组

Mor*_*app 6

你可以用zip列表理解来做到这一点.

result = False, True, False
xor = True, True, False
result = [a|b for a,b in zip(result,xor)]
print(result)
Run Code Online (Sandbox Code Playgroud)

或者就你的例子而言:

result = False, False, False
for j in some_list:
    xor = method(j)
    result = [a|b for a,b in zip(result,xor)]
Run Code Online (Sandbox Code Playgroud)

如果它是一个元组,你可以将列表comp更改为生成器并将其包装tuple().

您也可以将调用移动method(j)到zip 调用内部,而不是将其分配给中间变量.我认为它使它的可读性稍差,但这是个人偏好的问题.

  • @Mr_and_Mrs_D只有3个值,时间差异可以忽略不计.再说一遍,如果不是这样的话,我不确定你在寻找什么. (2认同)