将零添加到列表中

时间:2015-12-12 21:02:27

标签: 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]

我需要的是函数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

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

喜欢这个:

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

3 个答案:

答案 0 :(得分:5)

它返回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

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

正如@ {Hou}在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]

答案 1 :(得分:4)

这可能有用吗?我自己没有测试过,但我认为应该没问题。

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

答案 2 :(得分:1)

其他解决方案符合我的预算,但为什么不使用:

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表示参数firstdecimal将转换为零填充的8长度二进制字符串。