如何在列表列表中执行按位异或

假设我有一个列表列表 [[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]


以上是如何在列表列表中执行按位异或的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>