我有一个返回 bool 值的三元素元组的方法,我在循环中调用它。我想最终得到一个包含单个元组的 或 结果的三元素元组。如果该方法只返回一个 bool 值,它将是:
result = False
for j in some_list: # there is more processing in the loop, omitted
result |= method(j)
return result
我能否以某种优雅的方式将其概括为 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
但似乎有点不雅观。
编辑:澄清我想在两种情况下返回结果——首先是一个 bool 值,然后是一个 bool 值元组
请您参考如下方法:
您可以使用 zip 在列表理解中执行此操作。
result = False, True, False
xor = True, True, False
result = [a|b for a,b in zip(result,xor)]
print(result)
或者在您的例子中:
result = False, False, False
for j in some_list:
xor = method(j)
result = [a|b for a,b in zip(result,xor)]
如果它必须是元组,您可以将列表 comp 更改为生成器并将其包装在 tuple() 中。
您还可以将对 method(j) 的调用移动到对 zip 的调用中,而不是将其分配给中间变量。我认为这会降低可读性,但这是个人喜好问题。
