我正在尝试在获取两个参数的函数上组合for循环。我需要运行两个参数(它们都是整数列表)。尝试这个并不适合我:
def xor_bytes (b, a):
for i in range (b):
for Z in range (a):
if b[i]>a[Z]:
return byte1
if b[i]<a[Z]:
return byte2
if b[i]==a[Z]:
return 0
答案 0 :(得分:2)
def xor_bytes (b, a):
for i,z in zip(b,a):
if i>z:
return byte1
if i<z:
return byte2
if i==z:
return 0
zip
的标准库文档或在终端z
s 请注意,您的代码实际上只返回一个字节。您可能希望将其用作生成器:
def xor_bytes (b, a):
for i,z in zip(b,a):
if i>z:
yield i
if i<z:
yield z
if i==z:
yield chr(0)
In [6]: list(xor_bytes('hambone', 'cheesey'))
Out[6]: ['h', 'h', 'm', 'e', 's', 'n', 'y']
你可能会想要这个:
In [13]: [chr(ord(a)^ord(b)) for a,b in zip('hambone', 'cheesey')]
Out[13]: ['\x0b', '\t', '\x08', '\x07', '\x1c', '\x0b', '\x1c']
如果不明显,则需要两个字节的字符串并返回一个字节列表(或技术上,长度为1个字节的字符串),其中包含xoring每对字节的结果。
可替换地:
In [14]: ''.join(chr(ord(a)^ord(b)) for a,b in zip('hambone', 'cheesey'))
Out[14]: '\x0b\t\x08\x07\x1c\x0b\x1c'