我在进行异或搜索时遇到了问题。我有一个由二进制值组成的数组。我的列表包含1000个不同的二进制值,我想计算双循环在列表中查找元素所需的时间。因此,对于双循环搜索,我预计它将经历循环(1) + (2) +(3)+...+( 500500 )=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"不幸的是,当我打印count时,我得到count = 1,000,000
如果我将If语句更改为
if bitwise_xor(word1,word2):
break计数为1000
我还试着这样做:
if word1^word2==0:
break但它给出了"TypeError:不支持的^操作数类型:'str‘和'str'“
一个实际的例子是: 1101110111010111011101101110110010111100101111001 XOR 1101110111010111011101101110110010111100101111001,它应该给我0,然后退出内部循环
代码有什么问题?
发布于 2012-11-24 07:54:19
^可以处理整数,而不是数组,所以这并不奇怪。
我不知道你为什么使用字符串,但是:
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:
breakbitwise_xor实际上为每个字符串返回'NotImplemented‘,字符串输入。
发布于 2012-11-24 07:52:36
您的错误显示了问题:列表中的值是字符串,而不是数字。我不确定bitwise_xor对它们做了什么,但我很确定它不会先把它们转换成数字。如果您手动执行此操作(bitwise_xor (int (word1),int (Word2),我认为它应该可以工作。
https://stackoverflow.com/questions/13536951
复制相似问题