【问题标题】:OR element wise operation over two binary lists对两个二进制列表进行 OR 元素操作
【发布时间】:2015-08-02 08:27:03
【问题描述】:

我有以下两个二进制列表的代码,我想获得一个结果列表,其中元素 i 将是应用于两个列表的 i 元素的 OR 操作:

from operator import ior  

l_0 = [01100]
l_1 = [11000]

print map(ior, l_0, l_1)

我期待[11100] 的结果,但结果是:

[11000]

我检查了 ior 运算符,文档说它执行操作:

a = ior(a, b) is equivalent to a |= b

所以我也尝试了以下检查:

print ior(0,0)
print ior(1,0)
print ior(0,1)
print ior(1,1)

得到结果:

0
1
1
1

这是有道理的,但与在列表的第 3 位获得的结果不一致。我不明白为什么上面的map操作的结果不是[11100]。我在这里遗漏了一些东西,我希望你能对此有所了解。

【问题讨论】:

    标签: python list elementwise-operations


    【解决方案1】:

    [11000](例如)不是五个二进制数字的列表,它是一个十进制数字的列表,11000

    同样,01100 是一个八进制数,等于十进制 576,所以:

    11000d        = 0010101011111000b
    01100o = 576d = 0000001001000000b
                    -----------------
      perform or:   0010101011111000b = 11000d
    

    这就是为什么你得到11000 作为答案,就像你做的一样:

    [l_0[i] | l_1[i] for i in range(len(l_0))]
    

    如果你想处理一个由五个二进制数字组成的列表,那将是这样的:

    >>> l_0 = [0,1,1,0,0]
    >>> l_1 = [1,1,0,0,0]
    >>> [l_0[i] | l_1[i] for i in range(len(l_0))]
    [1, 1, 1, 0, 0]
    

    【讨论】:

      【解决方案2】:

      01100 是八进制表示(十进制为 576)。 11000 是十进制表示。它们不是二进制表示。

      要表示二进制,请在它们前面加上0b:

      [`01100`, `11000`]
      

      要从数字中获取二进制表示,请使用bin

      bin(num)
      

      '{:b}'.format(num)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-04
        • 2018-03-31
        • 2012-03-08
        • 1970-01-01
        • 2020-01-05
        • 2023-04-05
        • 2011-05-21
        • 1970-01-01
        相关资源
        最近更新 更多