我的功能是这样的:
输入:
8
输出:
['000', '001', '010', '011', '100', '101', '110', '111']
所以这是创建一个列表来存储input_number从0开始的二进制数。 这是我的代码(正确的版本):
import math
input_num = 8
max_bit = math.ceil(math.log(input_num, 2))
list_Bin = [None] * input_num
for i in range(input_num):
extra_d = max_bit - len(bin(i)[2:])
list_Bin[i] = '0'*extra_d + bin(i)[2:]
print(list_Bin)
此代码效果很好。但是,如果我改变代码的一行:
list_Bin = [None] * input_num
到
list_Bin = [] * input_num
它会引发IndexError。
我真的想知道为什么,因为我多次遇到过这个问题。
答案 0 :(得分:5)
空列表就像0;无论你把它乘以什么,答案仍然是一个空列表。
>>> [] == []*8
True
[][x]
会针对任何值IndexError
提出x
。
答案 1 :(得分:1)
[None]
和[]
之间存在差异。 [None]
是包含一个成员的列表,None
。但是[]
是一个空列表,其中包含零成员。
执行[None] * input_num
后,您创建了一个包含None
成员的新列表,其次数为input_num
次。
但是当你[] * input_num
时,没有成员可以开始。因此,您仍然有一个自然无法编入索引的空列表。