Python:将二进制转换为十进制

问题描述 投票:-1回答:2

我当前正在做的是遗传算法的实现。我已经编写了交叉和变异方法,现在正在编写我的健身方法。

我需要将0和1的列表转换为十进制值以计算距离。

我正在使用的当前输出是1s和0s整数值的列表。 (下面的示例):

[[0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]]
<class 'list'> 

我想将这些数字转换为它们所尊重的二进制等价物。我试过将列表转换为4组,然后调用binaryToDecimal函数将位转换为十进制值。但是,我收到错误消息'TypeError:'numpy.ndarray'对象不可调用'。我已经总结了我的代码,到目前为止,它是这样。

def converting_binary_to_decimal(L):
    output = []
    for l in L:
        l = list(map(str, l))
        sub_output = []
        for j in range(0, len(l)-1, 4):
            sub_output.append(int(''.join(l[j:j+4]), 2))
        output.append(sub_output)
    return output

def chunks(L, n):
    for i in range(0, len(L), n):
        yield L[i:i+n]

def fitness(child):
    newList1=list(chunks(child[0], 4))
    newList2=list(chunks(child[1], 4)) 

if __name__ == "__main__":
    myFitness = fitness(afterMU)

我想要的示例输出是:[[0,13,6,8,12,12,10,9,15],[0,8,7,0,4,4,1,8,15]]

python-3.x list binary type-conversion decimal
2个回答
0
投票

尝试此代码。

def converting_binary_to_decimal(L):
    output = []
    for l in L:
        l = list(map(str, l))
        sub_output = []
        for j in range(0, len(l)-1, 4):
            sub_output.append(int(''.join(l[j:j+4]), 2))
        output.append(sub_output)
    return output


L = [[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]]

converting_binary_to_decimal(L) 

0
投票

我想我明白了。

 x=[0, 1, 1, 0]
        k = 4
        n = len(x)//k
        for i in range(n):
            y = x[i*k:(i+1)*k]
            y = [str(j) for j in y]
            y = ''.join(y)
            y = int(y,2)
            print(y)

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.