python bitwise_xor

时间:2012-11-23 23:39:26

标签: python-2.7 bitwise-operators bitwise-xor

我遇到了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并退出内循环

代码有什么问题?

2 个答案:

答案 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',字符串输入。