我遇到了xor搜索问题。 我有一个由二进制值组成的数组。我的列表包含1000个不同的二进制值,我想计算双循环在列表中查找元素所需的时间。因此,对于双循环搜索,我希望它通过循环[(1)+(2)+(3)+ ... +(1000)] = 500500次。 [n(n + 1)/ 2]
我在以下代码中使用bitwise_xor
from numpy import bitwise_xor
count = 0
for word1 in listOutTextnoB:
for word2 in listOutTextnoB:
count+=1
if bitwise_xor(word1,word2)==0:
break
print "count"
不幸的是,当我打印计数时,我得到计数= 1,000,000
如果我将if语句更改为
if bitwise_xor(word1,word2):
break
计数是1000
我也尝试过:
if word1^word2==0:
break
但它给了我“TypeError:不支持的操作数类型的^:'str'和'str'”
一个工作的例子是: 1101110111010111011101101110110010111100101111001 XOR 1101110111010111011101101110110010111100101111001 它应该给我0并退出内循环
代码有什么问题?
答案 0 :(得分:1)
您的错误显示问题:列表中的值是字符串,而不是数字。我不确定bitwise_xor对他们做了什么,但我很确定它不会先将它们转换为数字。如果你手动执行此操作(bitwise_xor(int(word1),int(word2))),我认为它应该可行。
答案 1 :(得分:1)
^
适用于整数,而不是数组,所以这并不奇怪。
我不知道你为什么使用字符串,但是:
from numpy import bitwise_xor
listOutTextnoB = range(1000)
count = 0
for word1 in listOutTextnoB:
for word2 in listOutTextnoB:
count+=1
if bitwise_xor(word1,word2)==0:
break
print "count", count
打印
count 500500
正如你所预测的那样。
编辑:是的,你应该这样做
if int(word1) ^ int(word2) == 0:
break
bitwise_xor实际上是为每个字符串输入'NotImplemented',字符串输入。