将零添加到列表中

Jon*_*rte 1 python list prepend

故事如下.用户输入一个数字.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]
Run Code Online (Sandbox Code Playgroud)

我需要的是该函数Addzero(x)能够获取二进制数列表(InputInt),并将0s 添加到开头.如果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
Run Code Online (Sandbox Code Playgroud)

我找不到允许我将元素添加到开头的代码,所以我只是实现了一个反向功能来规避它.

当我打印这个功能的内容时,我得到......

> None
Run Code Online (Sandbox Code Playgroud)

这显然不是预期的结果.我需要输出.(80's 组成的完整元素列表1)

像这样:

> [0, 0, 1, 0, 1, 1, 0, 1]
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

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

elif len(value) == 8:
    return
Run Code Online (Sandbox Code Playgroud)

因此return只是意味着:" 我们已经完成,停止执行此功能,不应返回任何内容 ".

此外,并非所有代码路径都会执行返回语句.最后,你AddZero似乎只添加一个零,这可能是低效的.

更好的解决方案可能是:

def Addzero(value):
    return [0] * max(0,8-len(value)) + value
Run Code Online (Sandbox Code Playgroud)

这里的表达式[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
Run Code Online (Sandbox Code Playgroud)

因此,这意味着我们必须缩短以生成八个项目列表的元素的数量被构造为零列表.我们添加(追加)+原始列表.

正如@ Later42在他的回答中所示,你可以通过len先检查来提高效率,如果它等于8,则返回列表本身:

def Addzero(value):
    if(len(value) > 8) :
        return value
    else :
        return [0] * (8-len(value)) + value
Run Code Online (Sandbox Code Playgroud)

使用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]
Run Code Online (Sandbox Code Playgroud)