2017-11-17 4 views
0

整数ベクトルをバイナリに変換するプログラムを使用しましたが、今度は逆の操作を行う必要がありますが、ロジックを正しく使用していないと思います。リスト内の2つの項目を辞書のそれぞれの値に置き換えます

population=[[[0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1], [6], [0]], 
[[0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1], [4], [1]], 
[[0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0], [6], [2]], 
[[1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0], [4], [3]]] 

def BinaryConversion2(population): 
    binary_return = [] 
    binary_index = {(0,0): 0, (0,1): 1, (1,0): 2, (1,1): 3} 
    for game in range (0, len(population)): 
     converted = [s for num in population[game][0] for s in binary_index[num]] 
     binary_return.append(converted) 
    return (binary_return) 

私は、それぞれの辞書値の括弧内のバイナリ文字列のすべての2ビットを交換する必要があるが、私はここでの問題は、プログラムが単一ビットをインデックス化され、それが正常に動作していないことであると信じています。

辞書の各値のリスト内の2つのアイテムを参照する方法を知っている人はいますか?この場合に役立つかもしれないその他のもの。

ありがとうございました!

答えて

2
for game in population: 
    binary_return = [binary_index[(i,j)] for i,j in zip(game[0][0::2], game[0][1::2])] 
+0

それはまた、うまく動作します、ありがとう! – vferraz

+1

ニース。 'binary_index'は必要ないことに注意してください。単純に '2 * i + j'を使うことができます。 –

1

これは簡単な解決策です。これにより

population=[[[0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1], [6], [0]], 
[[0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1], [4], [1]], 
[[0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0], [6], [2]], 
[[1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0], [4], [3]]] 
binary_index = {(0,0): 0, (0,1): 1, (1,0): 2, (1,1): 3}  
#zipping 
list2 = [] 
for i in [num[0] for num in population]: 
    it = iter(i) 
    list2.append(zip(it,it)) 
converted = [[binary_index[s] for s in num]for num in list2] 

は、あなたの人口のリストと同じ形式で出力を取得しますが、私はあなたの各エントリの2つの要素のリストであるかについては考えているので、私はちょうどそれを落としました。あなたはそれを編集することができます。

+0

私はこのようにしていますが、ここでこのエラーが発生します。 BinaryConversion2の 'File" "、17行目 変換済み= [list2のnumのsのbinary_index [s]] NameError:name 'num'が定義されていません。 ? – vferraz

+0

申し訳ありませんが、コードに小さな誤りがありました。更新プログラムを試すことはできますか? –

+0

もちろん、あなたの人口を最初に定義する必要があります。上記の人口リストを試してみてください。 –

関連する問題