Python 如何比较两个列表中的项目并根据结果创建新列表?
作为练习,我尝试编写一个简单的XOR解密程序 我想获取ASCII的二进制输入,并将其存储在列表中。然后获取一个二进制密钥并将其存储在列表中 函数应该分别比较两个列表中的项目,并检查正在比较的两个项目是0还是1。如果两者均为0或均为1,则输出项=0。如果一项为0,另一项为1,反之亦然,则输出项=1 对于函数执行的每个比较,它都应该将输出二进制项存储在Python 如何比较两个列表中的项目并根据结果创建新列表?,python,list,xor,Python,List,Xor,作为练习,我尝试编写一个简单的XOR解密程序 我想获取ASCII的二进制输入,并将其存储在列表中。然后获取一个二进制密钥并将其存储在列表中 函数应该分别比较两个列表中的项目,并检查正在比较的两个项目是0还是1。如果两者均为0或均为1,则输出项=0。如果一项为0,另一项为1,反之亦然,则输出项=1 对于函数执行的每个比较,它都应该将输出二进制项存储在结果列表中。一旦函数迭代两个列表中的每个项目,它应该打印结果的结果二进制输出 我的逻辑是: def xor(): binary_plaint
结果
列表中。一旦函数迭代两个列表中的每个项目,它应该打印结果的结果二进制输出
我的逻辑是:
def xor():
binary_plaintext = [1,0,1,0,1,0,0,1, 0,1,0,0,0,1,1,0, 1,1,1,0,0,0,0,1]
binary_key = [1,1,1,1,1,0,1,1, 0,0,0,0,1,1,1,1, 1,0,1,1,0,1,0,1]
result = []
for plaintext_item in binary_plaintext and key_item in binary_key:
if plaintext_item == 1 and key_item == 1: # XOR 1|1 = 0
output = 0
output.append(result)
elif plaintext_item == 0 and key_item == 0: # XOR 0|0 = 0
output = 0
output.append(result)
elif plaintext_item == 1 and key_item == 0: # XOR 1|0 = 1
output = 1
output.append(result)
elif plaintext_item == 0 and key_item == 1: # XOR 0|1 = 1
output = 1
output.append(result)
print(result)
xor()
我的例子不起作用。比较二进制纯文本列表和二进制键列表并迭代它们的项,以便将输出值存储在新列表中的正确方法是什么?当我认为您有反向操作时,您永远不会更改结果,尽管您反复将其附加到输出中(即,将输出
附加到结果
)。当我认为您将输出
附加到结果
时,您永远不会更改结果
,尽管您反复将其附加到输出
).基本上,您可以通过两个输入相加,然后模2来实现异或
例如,这将起作用:
result = [(x+y) % 2 for x,y in zip(binary_plaintext,binary_key)]
print(result)
输出
基本上,您可以通过两个输入相加,然后模2来实现异或
例如,这将起作用:
result = [(x+y) % 2 for x,y in zip(binary_plaintext,binary_key)]
print(result)
输出
这将有助于:
result = [int(binary_plaintext[entry]!=binary_key[entry]) for entry in range(len(binary_plaintext))]
# [0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0]
这将有助于:
result = [int(binary_plaintext[entry]!=binary_key[entry]) for entry in range(len(binary_plaintext))]
# [0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0]
函数中有几个错误-首先,要并行迭代列表,可以使用zip()
-这样我们就可以替换
for plaintext_item in binary_plaintext and key_item in binary_key:
与
其次,你需要使用
result.append(output)
而不是
output.append(result)
最后,取消输入打印(结果)
,将其从for循环中取出
然后打印修正后的函数
[0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0]
函数中有几个错误-首先,要并行迭代列表,可以使用zip()
-这样我们就可以替换
for plaintext_item in binary_plaintext and key_item in binary_key:
与
其次,你需要使用
result.append(output)
而不是
output.append(result)
最后,取消输入打印(结果)
,将其从for循环中取出
然后打印修正后的函数
[0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0]
作为参考,您可以使用numpy执行此操作
将numpy导入为np
x=np.asarray([0,0,1,1])
y=np.asarray([0,1,0,1])
xor=x^y
在您自己的实现中,使用zip
从两个列表中获取匹配对。您还错误地交换了输出和结果:
def xor():
二进制明文=[1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1]
二进制_键=[1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1]
结果=[]
对于纯文本\u项,在zip中输入\u项(二进制\u纯文本,二进制\u项):
如果明文_项==1且键_项==1:#XOR 1 | 1=0
输出=0
result.append(输出)
elif纯文本_项==0和键_项==0:#异或0 | 0=0
输出=0
result.append(输出)
elif明文_项==1,键_项==0:#XOR 1 | 0=1
输出=1
result.append(输出)
elif纯文本_项==0和键_项==1:#异或0 | 1=1
输出=1
result.append(输出)
打印(结果)
异或
作为参考,您可以使用numpy执行此操作
将numpy导入为np
x=np.asarray([0,0,1,1])
y=np.asarray([0,1,0,1])
xor=x^y
在您自己的实现中,使用zip
从两个列表中获取匹配对。您还错误地交换了输出和结果:
def xor():
二进制明文=[1,0,1,0,1,0,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,0,0,0,1]
二进制_键=[1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,1]
结果=[]
对于纯文本\u项,在zip中输入\u项(二进制\u纯文本,二进制\u项):
如果明文_项==1且键_项==1:#XOR 1 | 1=0
输出=0
result.append(输出)
elif纯文本_项==0和键_项==0:#异或0 | 0=0
输出=0
result.append(输出)
elif明文_项==1,键_项==0:#XOR 1 | 0=1
输出=1
result.append(输出)
elif纯文本_项==0和键_项==1:#异或0 | 1=1
输出=1
result.append(输出)
打印(结果)
异或
我们可以使用python^操作符简单地实现这一点:
def xor():
binary_plaintext = [1,0,1,0,1,0,0,1, 0,1,0,0,0,1,1,0, 1,1,1,0,0,0,0,1]
binary_key = [1,1,1,1,1,0,1,1, 0,0,0,0,1,1,1,1, 1,0,1,1,0,1,0,1]
return [a ^ b for (a, b) in zip(binary_plaintext, binary_key]
我们将二进制\u明文和二进制\u键压缩在一起,并在列表中对每个元组的内容进行异或运算
这假设二进制明文和二进制密钥的长度相同。我们可以使用python^运算符来简单地执行此操作:
def xor():
binary_plaintext = [1,0,1,0,1,0,0,1, 0,1,0,0,0,1,1,0, 1,1,1,0,0,0,0,1]
binary_key = [1,1,1,1,1,0,1,1, 0,0,0,0,1,1,1,1, 1,0,1,1,0,1,0,1]
return [a ^ b for (a, b) in zip(binary_plaintext, binary_key]
我们将二进制\u明文和二进制\u键压缩在一起,并在列表中对每个元组的内容进行异或运算
这假设二进制明文和二进制密钥的长度相同。您可以使用zip。我使用的是python3
for text,key in zip(binary_plaintext, binary_key)
result.append(text ^ key)
你可以用zip,我用的是python3
for text,key in zip(binary_plaintext, binary_key)
result.append(text ^ key)
这应该是可行的,编辑代码以获得正确的结果
def xor():
binary_plaintext = [1,0,1,0,1,0,0,1, 0,1,0,0,0,1,1,0, 1,1,1,0,0,0,0,1]
binary_key = [1,1,1,1,1,0,1,1, 0,0,0,0,1,1,1,1, 1,0,1,1,0,1,0,1]
result = []
for i in range(0,len(binary_plaintext)):
if binary_plaintext[i] == binary_key[i]: # XOR 1|1 = 0 # XOR 0|0 = 0
output = 0
result.append(output)
elif binary_plaintext[i] == 1 and binary_key[i] == 0: # XOR 1|0 = 1
output = 1
result.append(output)
elif binary_plaintext[i] == 0 and binary_key[i] == 1: # XOR 0|1 = 1
output = 1
result.append(output)
print(result)
xor()
这应该是可行的,编辑代码以获得正确的结果
def xor():
binary_plaintext = [1,0,1,0,1,0,0,1, 0,1,0,0,0,1,1,0, 1,1,1,0,0,0,0,1]
binary_key = [1,1,1,1,1,0,1,1, 0,0,0,0,1,1,1,1, 1,0,1,1,0,1,0,1]
result = []
for i in range(0,len(binary_plaintext)):
if binary_plaintext[i] == binary_key[i]: # XOR 1|1 = 0 # XOR 0|0 = 0
output = 0
result.append(output)
elif binary_plaintext[i] == 1 and binary_key[i] == 0: # XOR 1|0 = 1
output = 1
result.append(output)
elif binary_plaintext[i] == 0 and binary_key[i] == 1: # XOR 0|1 = 1
output = 1
result.append(output)
print(result)
xor()
请提供更多“不起作用”的详细信息。请提供更多“不起作用”的详细信息。完成较小数组时压缩停止。不需要数组具有相同的长度完成较小数组时压缩停止。不需要数组具有相同的长度