Xor元组功能

时间:2015-02-06 13:57:41

标签: python procedure

我是python的初学者,我被阻止了一系列我必须做的指示。我需要创建一个函数,它接受参数两个3个整数的元组。该函数将在2个第一个整数,然后是2个第二个整数和2个第三个整数之间执行xor。最后,它会将这些结果作为元组返回。

这是我之前在代码中使用的函数:

def xor (a,b):
    return (bool (a) and not(bool(b))) or (not(bool (a))) and bool (b)

如果不准确或完全错误,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:5)

在Python中,^中缀运算符表示整数的xor(您可以通过查看int.__xor__的文档来看到这一点,但小心,{{1}行为可以为其他类型重载,并且可能不会反映与通常的逻辑xor操作相关的任何内容。

所以在这种情况下,你可以这样做:

__xor__

例如:

def xor(tup_a, tup_b):
   return tuple(a^b for a,b in zip(tup_a, tup_b))

这使用In [5]: xor((1,2,3), (3, 2, 1)) Out[5]: (2, 0, 2) 函数,如果不熟悉,您应该阅读它。关于此功能的一个约定:如果ziptup_a不具有相同的长度,则压缩过程将仅发生在较短的长度上,而其余的项目则来自较长的一个人将被丢弃。

如果您想编写一些额外的代码来执行特殊处理这些额外项目的操作,您必须修改此函数定义以使用tup_b

例如,假设如果itertools.izip_longest短于tup_a,那么您希望在tup_b不是0的地方使用虚拟值tup_a足够长的时间来匹配tup_b ...

中的某些内容
from itertools import izip_longest
def xor(tup_a, tup_b, fill=0):
    return tuple(a^b for a,b in izip_longest(tup_a, tup_b, fillvalue=fill))

然后:

In [11]: xor((1,2,3), (3, 2, 1))
Out[11]: (2, 0, 2)

In [12]: xor((1,2), (3, 2, 1))
Out[12]: (2, 0, 1)

答案 1 :(得分:1)

假设ab是相同大小的整数元组(需要断言):

def xor(a, b):
    return tuple(a[i]^v for i, v in enumerate(b))