0

我在进行异或搜索时遇到问题。我有一个由二进制值组成的数组。我的列表包含 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"

不幸的是,当我打印 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 并退出内循环

代码有什么问题?

4

2 回答 2

1

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

于 2012-11-23T23:52:35.757 回答
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”。

于 2012-11-23T23:54:19.480 回答