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)
但似乎有点不雅.
编辑:澄清我想在两种情况下返回结果 - 首先是布尔值,然后是布尔值元组
你可以用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 调用内部,而不是将其分配给中间变量.我认为它使它的可读性稍差,但这是个人偏好的问题.