首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xor元组函数

Xor元组函数
EN

Stack Overflow用户
提问于 2015-02-06 21:57:41
回答 2查看 765关注 0票数 0

我是python的初学者,我在一系列必须执行的指令上遇到了障碍。我需要做一个函数,它接受3个整数的两个元组的参数。该函数将在第一个整数、第二个整数和第二个第三个整数之间执行xor运算。最后,它将以元组的形式返回这些结果。

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

代码语言:javascript
复制
def xor (a,b):
    return (bool (a) and not(bool(b))) or (not(bool (a))) and bool (b)

如果它不准确或完全错误,请让我知道。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-02-06 22:03:47

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

因此,在这种情况下,您可以这样做:

代码语言:javascript
复制
def xor(tup_a, tup_b):
   return tuple(a^b for a,b in zip(tup_a, tup_b))

例如:

代码语言:javascript
复制
In [5]: xor((1,2,3), (3, 2, 1))
Out[5]: (2, 0, 2)

这利用了zip函数,如果您不熟悉该函数,则应该阅读该函数。关于此函数的一个约定是:如果tup_atup_b的长度不相同,则压缩过程将只发生到较短的那个的长度,而来自较长的那个的其余项将被丢弃。

如果你想写一些额外的代码来做一些特殊的事情来处理这些额外的项目,你必须修改这个函数定义来使用itertools.izip_longest

例如,假设tup_atup_b短,那么您希望在tup_a不够长的地方使用0的虚拟值,以便与tup_b中的内容匹配……

代码语言:javascript
复制
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))

然后:

代码语言:javascript
复制
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)
票数 5
EN

Stack Overflow用户

发布于 2015-02-06 22:03:03

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

代码语言:javascript
复制
def xor(a, b):
    return tuple(a[i]^v for i, v in enumerate(b))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28367380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档