我是python的初学者,我被阻止了一系列我必须做的指示.我需要创建一个函数,它接受参数两个3个整数的元组.该函数将在2个第一个整数,然后是2个第二个整数和2个第三个整数之间执行xor.最后,它会将这些结果作为元组返回.
这是我之前在代码中使用的函数:
def xor (a,b):
return (bool (a) and not(bool(b))) or (not(bool (a))) and bool (b)
Run Code Online (Sandbox Code Playgroud)
如果它不准确或完全错误,请告诉我.谢谢!
在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))
Run Code Online (Sandbox Code Playgroud)
例如:
In [5]: xor((1,2,3), (3, 2, 1))
Out[5]: (2, 0, 2)
Run Code Online (Sandbox Code Playgroud)
这使用了该zip函数,如果不熟悉,您应该阅读该函数.关于这个函数的一个约定:如果tup_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))
Run Code Online (Sandbox Code Playgroud)
然后:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |