2015-11-28 100 views
3

我有一個元組'0''1',我想要它的所有元素的異或。例如,如果我有('0', '1', '1', '0'),我想獲得((0 xor 1) xor 1) xor 0xor元素的列表/元組

我有以下的(工作)片段:(?使用map和lambda函數)

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) 

我怎樣才能使它更符合Python AY

+0

爲什麼在例子中額外的'xor 1'?你有'0,1,1'。結果應該是'0 xor 1 xor 1' – hjpotter92

+0

編輯,謝謝。 –

回答

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

減少( ...)reduce(函數,序列[,初始值]) - >值

將兩個參數的函數累加應用到一個sequ從左到右依次爲 ,以便將序列簡化爲單個值。例如,reduce(lambda x,y:x + y,[1,2,3,4,5])計算 ((((1 + 2)+3)+4)+5)。如果存在初始值,則將其置於計算序列的項目 之前,並在 序列爲空時用作默認值。

+0

看起來不錯。你能解釋一下嗎? –

+0

在python shell中嘗試'help(reduce)' – zephor

+1

將一個兩個參數的函數累積地應用於序列的項目,從左到右,以便將序列簡化爲單個值。例如,reduce(lambda x,y:x + y,[1,2,3,4,5])計算((((1 + 2)+3)+4)+5)。如果存在初始值,則將其置於計算中序列的項目之前,並在序列爲空時用作默認值。 – zephor

0

如前所述減少效果很好。如果你讀到減少你會遇到一個fold這是一個更高階的函數(如地圖)的概念。

在某些語言中,您可以向左或向右摺疊。有趣的是,在您的情況下,如果您從左側或右側開始,則xor是可交換和關聯的,則會得到相同的結果。