2017-06-18 28 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

您的回答超出我的预期,谢谢! –

相关问题