2017-06-18 3 views
0

関数があるとします。関数はパラメータとして文字列を受け取ります。 この関数はクラス関数の1つです。文字列を受け取った後、部分文字列に基づいていくつかの変数を計算します。 プロセスの1つの部分では、私はキー:値のペアを辞書に追加する必要があります。 これらの値は、前述の文字列のいくつかの部分から計算する必要がありますが、charの後に続く(intへの変換後)特定の2のべき乗にする必要があります。累乗は、0から部分文字列の最後まで1だけ引き上げられます。 私は、私は2つのパワーに上げるincementation-一部を解決する方法を知らない怖い:部分文字列からの要素を合計して2の累乗に戻した後に

self.topologia = {} 
    for i in range(0, 6): 
     if int(dna[17 + i * 8]) == 1: 
      self.topologia[self.ile_warstw] = sum(list(map(lambda: x * Math.Pow(2, ?), int(dna[17 + i * 8:17 + i * 8 + 7])))) 
      self.ile_warstw += 1 

疑問符が私は解決することができないんだ部分を示しています。 文字列は0と1だけで構成されます。

編集 - 明確化の目的:私がやりたいものを

は次のとおりです。 E = X1 * 2^0 + X2 * 2^1 + X3 * 2^2 + X4 * 2^3 + ... + XN * 2 ^(N-1)

+0

"x ** 2'、!! – zaidfazil

+0

@FazilZaid もし私が間違っていれば私を修正してください。しかし、x ** 2はすべての要素を一度2の累乗に上げます:x1^2、x2^2、x3^2、 私がしたいことはこれです: x1 * 2^0、x2 * 2^1、x3 * 2^2、x4 * 2^3、...、xn * 2 ^(n-1) –

答えて

0

私が正しくあなたの問題を理解していれば、あなたのデータをenumerateしてからラムダ関数に値と列挙両方養うことができます。

self.topologia = {} 
    for i in range(0, 6): 
     if int(dna[17 + i * 8]) == 1: 
      self.topologia[self.ile_warstw] = sum(list(map(lambda x: x[1] * math.pow(2, x[0]), enumerate(int(dna[17 + i * 8:17 + i * 8 + 7])))))   
      self.ile_warstw += 1 

をそして、 math.pow(2, n)の代わりに1 << nを指定すると、次のコードが返されます。

  self.topologia[self.ile_warstw] = sum(list(map(lambda x: x[1] * (1 << x[0]), enumerate(int(dna[17 + i * 8:17 + i * 8 + 7]))))) 
+0

あなたの答えは私の期待を超えました。 –

関連する問題