Skip to main content
 首页 » 编程设计

python之将零添加到列表中

2025年05月04日9qq号

故事如下。用户输入一个数字。 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),并添加 0让我们开始吧。如果列表中已经有 8 元素,则不需要添加 0。

def Addzero(value): 
    reverse = value[::-1]  
    if len(value) != 8: 
        value.extend([0]) 
        if len(value) == 8: 
            reverse = value[::-1] 
    elif len(value) == 8: 
        return 

我找不到让我将元素添加到开头的代码,所以我只是实现了一个反向功能来绕过它。

当我打印这个函数的内容时,我得到...

> None 

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

像这样:

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

请您参考如下方法:

它返回 None 的原因仅仅是因为您的 return 语句缺少表达式:

elif len(value) == 8: 
    return 

因此 return 简单的意思是:“我们完成了,停止执行这个函数,什么都不应该返回”。

此外,并非所有代码路径都会执行 return 语句。最后,您的 AddZero 似乎只添加了一个单个 零,这可能是低效的。

更好的解决方案可能是:

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

此处的表达式 [0]*n 表示您在列表中重复 0 n 次。所以 [0]*4 将导致 [0,0,0,0]。现在我们需要添加的次数是 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]