或对两个二进制列表的元素明智的操作
OR element wise operation over two binary lists
我有以下两个二进制列表的代码,我想获得一个结果列表,其中元素 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]
。我在这里遗漏了一些东西,我希望你能对它有所了解。
[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]
01100
是八进制表示(十进制为 576)。 11000
是十进制表示法。它们不是二进制表示。
要表示二进制,请在它们前面加上 0b
:
[`01100`, `11000`]
要从数字中获取二进制表示,请使用 bin
:
bin(num)
或
'{:b}'.format(num)
我有以下两个二进制列表的代码,我想获得一个结果列表,其中元素 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]
。我在这里遗漏了一些东西,我希望你能对它有所了解。
[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]
01100
是八进制表示(十进制为 576)。 11000
是十进制表示法。它们不是二进制表示。
要表示二进制,请在它们前面加上 0b
:
[`01100`, `11000`]
要从数字中获取二进制表示,请使用 bin
:
bin(num)
或
'{:b}'.format(num)