0

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

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

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

4

2 回答 2

3

[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]
于 2015-08-02T08:29:25.410 回答
0

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

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

[`01100`, `11000`]

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

bin(num)

或者

'{:b}'.format(num)
于 2015-08-02T08:31:46.150 回答