2016-07-05 39 views
-2

我需要在两个二进制字符串之间执行XOR操作。如何在python中异或两个二进制字符串

xor("00110011", "11001100") = "11111111" 

我目前使用此功能

def xor(x, y): 
    ans = "" 
    for i in xrange(len(x)): 
     if x[i] == "0" and y[i] == "1" or x[i] == "1" and y[i] == "0": 
      ans += "1" 
     else: 
      ans += "0" 
    return ans 

请给我一个好方法

+0

您可以使用括号,如果你喜欢。顺便说一句,这个代码中是否存在特定的问题? – thefourtheye

+0

请[编辑]你的问题,并包括你的输入样本和预期的输出。 – 2016-07-05 13:24:10

+2

你可以使用'^' - 异或运算符。请参阅http://stackoverflow.com/questions/19414093/how-to-xor-binary-with-python – gunzapper

回答

4

如果'0''1'字符必须使用字符串,只需使用一个映射:

_xormap = {('0', '1'): '1', ('1', '0'): '1', ('1', '1'): '0', ('0', '0'): '0'} 
def xor(x, y): 
    return ''.join([_xormap[a, b] for a, b in zip(x, y)]) 

否则,只是转换为两个整数,XOR那些和重新格式化回二进制字符串:

def xor(x, y): 
    return '{1:0{0}b}'.format(len(x), int(x, 2)^int(y, 2)) 

这可确保生成的字符串具有相同的长度,填充长度为x

4
def xor(x, y): 
    return '{0:b}'.format(int(x, 2)^int(y, 2)) 

this answer。与流行的看法相反,Python does have bitwise operators

+2

请注意,这可能会导致* short *二进制字符串,null填充将丢失。例如,用'xor('00000001','00000000')来尝试。 –

-2

如果需要彻底改造该喂线轮

def alternative_xor(x, y): 
    a = int(x) 
    b = int(y) 
    return (a & ~b) | (~a & b) 
+0

'x'和'y'是字符串。 '〜'和'&'不适用于字符串。 –

+0

@MartijnPieters - 现在我希望它更好 – gunzapper

+0

返回值也必须是一个字符串。但为什么这么小心使用'^'? –

相关问题