0

2 つのバイナリ リストの次のコードがあり、要素が 2 つのリストの要素に適用される操作iになるリストを取得したいと考えています。ORi

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]。私はここに何かが欠けています。あなたがそれに光を当ててくれることを願っています。

4

2 に答える 2

3

[11000](たとえば) は5 つの 2 進数のリストではなく、1 つの10 進数のリストです11000

同様に、01100は 10 進数に等しい単一の 8 進数な576ので、次のようになります。

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

そのため11000、行った場合とまったく同じように、答えが得られます。

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

5 つの 2 進数のリストを処理する場合は、次のようになります。

>>> 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 に答える