2017-06-18 21 views
0

假設有一個函數。該函數將字符串作爲參數。 該函數是一個類的函數之一。收到一個字符串後,它會根據子字符串計算一些變量。 在該過程的一部分中,我需要將鍵值對附加到字典中。 這些值應該從所提到的字符串的幾個部分計算,但每個char需要(在轉換爲int之後)被提升爲2的特定冪。權力從0增加到子串結尾。 我怕我不知道如何解決提高電源的兩個incementation部分:picewise將它們上升到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會提高每個元素的權力兩次:x1^2,x2^2,x3^2, 我想要做的是這樣的: x1 * 2^0,x2 * 2^1,x3 * 2^2,x4 * 2^3,...,xn * 2 ^(n-1) –

回答

0

如果我正確理解你的問題,你可以enumerate數據,然後同時並行值和枚舉到您的lambda表達式:

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

您的回答超出我的預期,謝謝! –

相關問題