在lis前面加零

2024-09-28 05:26:43 发布

您现在位置:Python中文网/ 问答频道 /正文

故事如下。用户输入一个数字。Python将字符串转换为int,并使用算法生成二进制数。例如:

firstdecimal=input("Please enter your first denary number: ")

> 45

StrToInt = int(firstdecimal)
InputInt = ToBin(StrToInt)     # a working binary conversion function
print(InputInt)

> [1, 0, 1, 1, 0, 1]

我需要的是函数Addzero(x)能够获得二进制数字列表(InputInt),并将0s添加到开头。如果列表中已经有8元素,则不需要添加0。在

^{pr2}$

我找不到允许我在开头添加元素的代码,所以我只是实现了一个反向特性来避开它。在

当我打印这个函数的内容时。。。在

> None

这显然不是预期的结果。我需要输出。(一个完整的8元素列表,由01组成)

像这样:

> [0, 0, 1, 0, 1, 1, 0, 1]

Tags: 函数字符串用户算法元素列表input二进制
3条回答

我想其他解决方案也很合适,但为什么不直接使用:

firstdecimal = input("Please enter your first denary number: ")

> 45

binaryStr = '{0:08b}'.format(firstdecimal)  # string, not a list

print(binaryStr)
> '00101101'

print(list(map(int, binaryStr))  # gives you the list
> [0, 0, 1, 0, 1, 1, 0, 1]

注意,格式字符串中的08b表示参数{}将被转换为一个零填充的8长度二进制字符串。在

它返回None的原因很简单,因为您的return语句缺少一个表达式:

elif len(value) == 8:
    return

因此,return的意思是:“我们完成了,停止执行这个函数,不应该返回任何东西。”。在

而且,并不是所有的代码路径都会执行return语句。最后,你的AddZero似乎只添加了一个零,这可能是低效的。在

更好的解决方案可能是:

^{pr2}$

这里的表达式[0]*n表示在列表中重复0n次。所以[0]*4将产生{}。现在我们需要添加这个的次数是max(0,8-len(value))。实际上,max(0,...)甚至不需要,因此可以将其重写为:

def Addzero(value):
    return [0] * (8-len(value)) + value

因此,这意味着我们必须缩短生成八项列表的元素数量被构造为一个零的列表。我们用+将原始列表添加(追加)到它。在

正如@Later42在his answer中所示,您可以通过先执行len检查来提高效率,如果它等于8,则返回列表本身:

def Addzero(value):
    if(len(value) > 8) :
        return value
    else :
        return [0] * (8-len(value)) + value

演示使用Python的交互式shell:

$ python
Python 2.7.9 (default, Apr  2 2015, 15:33:21) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def Addzero(value):
...     return [0] * (8-len(value)) + value
... 
>>> Addzero([1, 0, 1, 1, 0, 1])
[0, 0, 1, 0, 1, 1, 0, 1]

这可能有用吗?我没有亲自测试过,但我觉得应该没问题。在

def add_zero(binary_list):
    if len(binary_list) < 8:
        zeros = [0] * (8 - len(binary_list))
        return zeros + binary_list
    else:
        return binary_list

相关问题 更多 >

    热门问题