如何在列表列表中执行按位异或
假设我有一个列表列表 [[1,2,3],[1,2,3,4]]
我怎样才能找到所有列表元素列表的异或,
因为的XOR[1^2^3]是0,XOR的[1^2^3^4]是4这样的结果列表会
[0,4]
提前致谢。
回答
您可以将列表理解与functools.reduce和 一起使用operator.xor。
from operator import xor
from functools import reduce
seq = [[1,2,3],[1,2,3,4]]
res = [reduce(xor, i) for i in seq]
print(res)
输出
[0, 4]
编辑:获取“具有最大异或值的列表”
这将返回一个“列表列表”,其中所有列表的异或值与 的相同max_xor。
max_xor = max(res) # from above
max_xor_lists = [i for i, j in zip(seq, res) if j == max_xor]
print(max_xor_lists)
输出
[[1, 2, 3, 4]]
如果您只需要具有最大异或值max_xor_lists[0]的第一个列表,则将给出与此条件匹配的第一个列表。
如果唯一的结果是获得具有最大异或值的列表(IOW,不想要中间异或结果),那么正如 Alex 在评论中所建议的那样
from operator import xor
from functools import reduce, partial
seq = [[1,2,3],[1,2,3,4]]
_xor = partial(reduce, xor)
max_xor_list = max(seq, key=_xor)
print(max_xor_list)
输出
[1, 2, 3, 4]