我是python的初学者,我在一系列必须执行的指令上遇到了障碍。我需要做一个函数,它接受3个整数的两个元组的参数。该函数将在第一个整数、第二个整数和第二个第三个整数之间执行xor运算。最后,它将以元组的形式返回这些结果。
下面是我之前在代码中使用的函数:
def xor (a,b):
return (bool (a) and not(bool(b))) or (not(bool (a))) and bool (b)如果它不准确或完全错误,请让我知道。谢谢!
发布于 2015-02-06 22:03:47
在Python语言中,^中缀运算符表示整数的xor (您可以通过查看int.__xor__的文档来了解这一点,但是要小心,对于其他类型,__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)这利用了zip函数,如果您不熟悉该函数,则应该阅读该函数。关于此函数的一个约定是:如果tup_a和tup_b的长度不相同,则压缩过程将只发生到较短的那个的长度,而来自较长的那个的其余项将被丢弃。
如果你想写一些额外的代码来做一些特殊的事情来处理这些额外的项目,你必须修改这个函数定义来使用itertools.izip_longest。
例如,假设tup_a比tup_b短,那么您希望在tup_a不够长的地方使用0的虚拟值,以便与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)发布于 2015-02-06 22:03:03
假设a和b是大小相同的整数元组(需要断言):
def xor(a, b):
return tuple(a[i]^v for i, v in enumerate(b))https://stackoverflow.com/questions/28367380
复制相似问题