Python 2.7 python按位异或

Python 2.7 python按位异或,python-2.7,bitwise-operators,bitwise-xor,Python 2.7,Bitwise Operators,Bitwise Xor,我在xor搜索中遇到问题。 我有一个由二进制值组成的数组。我的列表包含1000个不同的二进制值,我想计算双循环在列表中查找元素所需的时间。因此,对于双循环搜索,我希望它通过循环[(1)+(2)+(3)+…+(1000)]=500500次。[n(n+1)/2] 我在下面的代码中使用按位异或 from numpy import bitwise_xor count = 0 for word1 in listOutTextnoB: for word2 in listOutTextnoB:

我在xor搜索中遇到问题。 我有一个由二进制值组成的数组。我的列表包含1000个不同的二进制值,我想计算双循环在列表中查找元素所需的时间。因此,对于双循环搜索,我希望它通过循环[(1)+(2)+(3)+…+(1000)]=500500次。[n(n+1)/2]

我在下面的代码中使用按位异或

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=1000000

如果我将If语句更改为

if bitwise_xor(word1,word2):
      break
计数是1000

我还试着做:

if word1^word2==0:
       break
但是它给了我“TypeError:unsupported operand type for ^:'str'和'str'”

一个有效的例子是: 110111011101110111011101110110010111100101111001异或1101110111011011101111110110110111001 它应该给我0并退出内部循环


代码有什么问题?

您的错误表明了问题所在:列表中的值是字符串,而不是数字。我不确定按位异或对它们做了什么,但我很确定它不会首先将它们转换为数字。如果您手动执行此操作(按位异或(int(word1)、int(word2)),我认为它应该可以工作。

^
可以工作在整数上,而不是数组上,所以这并不奇怪

我不知道你为什么用字符串,但是:

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
按位异或实际上为每个字符串、字符串输入返回“NotImplemented”