将零添加到列表中

Posted

技术标签:

【中文标题】将零添加到列表中【英文标题】:Prepending zeros to a list 【发布时间】:2015-12-12 21:02:27 【问题描述】:

故事如下。用户输入一个数字。 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

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

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

像这样:

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

【问题讨论】:

您如何调用 Addzero() 以及您在哪里打印? 来自外壳。这只是一个测试,那部分工作正常,代码是: def ToBin(x): if x == 0: return [0] bit = [] while x: bit.append(x % 2) x > >= 1 返回位[::-1] 您说找不到将元素添加到列表的代码?简单查一下pythondocumentation有答案 如果你想遵循 PEP(一个 Python 的编码建议,嗯,有点),以后把你的函数名写成大写。 【参考方案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]

【讨论】:

【参考方案2】:

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

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

【讨论】:

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

【讨论】:

没有真正的答案,更像是一个更长的评论。

以上是关于将零添加到列表中的主要内容,如果未能解决你的问题,请参考以下文章

怎么解决 ? (将列表添加到列数据框pyspark)

将零填充到 Python 列表

NSNumberformatter 将零添加到小数部分

双向将字符串的“虚拟”列表绑定到列

Google BigQuery SQL:从 JSON(列表和数组)中提取数据到列中

FlowLayoutPanel 添加到列?