列表/元组的元素的xor

时间:2015-11-28 10:38:33

标签: python dictionary lambda

我有'0''1'的元组,我想要其所有元素的xor。例如,如果我有('0', '1', '1', '0'),我想获得((0 xor 1) xor 1) xor 0

我有以下(工作)片段:

bit = ('0', '1', '0', '1', '0', '1', '0')
out = bit[0]
for i in range(1,len(bit)):
    out = int(out) ^ int(bit[i])
print str(out)

如何使用map和lambda函数进行更加pythonic的操作?)

3 个答案:

答案 0 :(得分:10)

print reduce(lambda i, j: int(i) ^ int(j), bit)
  

reduce(...)reduce(function,sequence [,initial]) - >值

     

将两个参数的函数累加应用于序列的项目,       从左到右,以便将序列减少到单个值。       例如,reduce(lambda x,y:x + y,[1,2,3,4,5])计算       ((((1 + 2)3)4)5)。如果存在initial,则将其放在项目之前       计算中的序列,并作为默认值       序列是空的。

答案 1 :(得分:0)

如前所述,减少效果很好。如果您阅读有关减少的内容,您会遇到fold的概念,这是一个更高阶函数(如地图)。

在某些语言中,您可以向左或向右折叠。有趣的是,在你的情况下,如果你从左边或右边开始,你会得到相同的结果,因为xor是可交换的和关联的。

答案 2 :(得分:-1)

在Python 3中,您可以使用:

Repo.findAllByAAndB("0", SerachedValueForB)
Repo.findAllByAAndB(SerachedValueForA, SerachedValueForB)

或者如果您想运行 XOR:

List<Entity> findAllByAAndB(String a, String b);
List<Entity> findAllByAAndBOrAIsNullAndB(String a, String b);