我有'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的操作?)
答案 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);