将零添加到列表中
Prepending zeros to a list
故事如下。用户输入一个数字。 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
这显然不是预期的结果。我需要输出。 (由 0
、1
组成的完整 8
元素列表)
像这样:
> [0, 0, 1, 0, 1, 1, 0, 1]
这可能有用吗?我自己没有测试过,不过我觉得应该没问题。
def add_zero(binary_list):
if len(binary_list) < 8:
zeros = [0] * (8 - len(binary_list))
return zeros + binary_list
else:
return binary_list
它 returns None
的原因仅仅是因为您的 return
语句缺少表达式:
elif len(value) == 8:
return
因此 return
简单的意思是:“我们完成了,停止执行这个函数,什么都不应该 returned”。
而且并非所有代码路径都会执行 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 在 中所示,您可以通过先进行 len
检查来提高效率,如果它等于 8,则 return 列表本身:
def Addzero(value):
if(len(value) > 8) :
return value
else :
return [0] * (8-len(value)) + value
Demo 使用 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]
其他解决方案符合我的要求,但为什么不直接使用:
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 长度二进制字符串。
故事如下。用户输入一个数字。 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
这显然不是预期的结果。我需要输出。 (由 0
、1
组成的完整 8
元素列表)
像这样:
> [0, 0, 1, 0, 1, 1, 0, 1]
这可能有用吗?我自己没有测试过,不过我觉得应该没问题。
def add_zero(binary_list):
if len(binary_list) < 8:
zeros = [0] * (8 - len(binary_list))
return zeros + binary_list
else:
return binary_list
它 returns None
的原因仅仅是因为您的 return
语句缺少表达式:
elif len(value) == 8:
return
因此 return
简单的意思是:“我们完成了,停止执行这个函数,什么都不应该 returned”。
而且并非所有代码路径都会执行 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 在 len
检查来提高效率,如果它等于 8,则 return 列表本身:
def Addzero(value):
if(len(value) > 8) :
return value
else :
return [0] * (8-len(value)) + value
Demo 使用 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]
其他解决方案符合我的要求,但为什么不直接使用:
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 长度二进制字符串。