将零添加到列表中
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
),并将0
s添加到开头。如果列表中已经有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 长度二进制字符串。
【讨论】:
没有真正的答案,更像是一个更长的评论。以上是关于将零添加到列表中的主要内容,如果未能解决你的问题,请参考以下文章