首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python bitwise_xor

python bitwise_xor
EN

Stack Overflow用户
提问于 2012-11-24 07:39:26
回答 2查看 1.5K关注 0票数 0

我在进行异或搜索时遇到了问题。我有一个由二进制值组成的数组。我的列表包含1000个不同的二进制值,我想计算双循环在列表中查找元素所需的时间。因此,对于双循环搜索,我预计它将经历循环(1) + (2) +(3)+...+( 500500 )=500500次。n(n+1) /2

我在下面的代码中使用了bitwise_xor

代码语言:javascript
复制
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语句更改为

代码语言:javascript
复制
if bitwise_xor(word1,word2):
      break

计数为1000

我还试着这样做:

代码语言:javascript
复制
if word1^word2==0:
       break

但它给出了"TypeError:不支持的^操作数类型:'str‘和'str'“

一个实际的例子是: 1101110111010111011101101110110010111100101111001 XOR 1101110111010111011101101110110010111100101111001,它应该给我0,然后退出内部循环

代码有什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-24 07:54:19

^可以处理整数,而不是数组,所以这并不奇怪。

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

代码语言:javascript
复制
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

打印

代码语言:javascript
复制
count 500500

如你所料。

编辑:是的,你应该这样做

代码语言:javascript
复制
if int(word1) ^ int(word2) == 0:
    break

bitwise_xor实际上为每个字符串返回'NotImplemented‘,字符串输入。

票数 1
EN

Stack Overflow用户

发布于 2012-11-24 07:52:36

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13536951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档