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

时间:2020-04-22 21:56:16

标签: python-3.x list binary type-conversion decimal

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

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

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

Dim rng As Range
Set rng = ActiveSheet.Range("B:B").Find("hello")
If rng Is Nothing Then Exit Sub

Dim rw As Long
rw = rng.Row + 1

Do While ActiveSheet.Cells(rw, 2) = ""
    Rows(rw).Delete
Loop

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

[[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'> 

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

2 个答案:

答案 0 :(得分: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) 

答案 1 :(得分: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)

谢谢。