将子串中的元素分段升至 2 的幂后求和

Sum elements from substring after picewise rising them to power of two

假设有一个函数。该函数接收一个字符串作为参数。 该函数是 class 函数之一。在接收到一个字符串后,它会根据子字符串计算一些变量。 在该过程的一部分中,我需要将 key:value 对附加到字典中。 这些值应该从提到的字符串的几个部分计算出来,但是每个后面的字符都需要(在转换为 int 之后)被提升到 2 的特定幂。从 0 到子字符串末尾,幂次增加 1。 恐怕我不知道如何解决提升到二次方的强化部分:

    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)

如果我对你的问题的理解正确,你可以 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])))))