为什么此代码在某些情况下会引发IndexError?
我的功能是这样的:为什么此代码在某些情况下会引发IndexError?
输入:
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。
我真的很想知道为什么,因为我多次遇到这个问题。
[None]
和[]
之间的差异。 [None]
是与一个成员,这是None
的列表。但[]
是一个空列表,零成员。
当你做[None] * input_num
你创建一个新列表None
成员,多达input_num
次。
但是,当你做[] * input_num
,没有成员开始。因此,你仍然有一个空的列表,这自然不能被编入索引。
一个空的列表就像0;不管你乘以多少,答案仍然是一个空的列表。
>>> [] == []*8
True
而且[][x]
将引发IndexError
任何价值x
。
哇!我知道了!这是非常清楚!所以如果我想给空列表值,唯一的方法是.append?我真的很感谢你的回答;) –
是的,一个空的列表就像任何其他列表;它只是没有任何价值。你可以用len取其长度(和其他列表一样,一个有效的索引'i'是'0 chepner
谢谢你的帮助!但是,我可以使用.append来给出空列表值吗? –
@MarsLee很高兴见到你[再](http://*.com/questions/35837794/can-someone-explain-this-recursive-for-me)。 ;)是的,一个空列表是一个*列表*,因此你可以附加一个项目,就像其他列表一样 – Ian
当然!谢谢你昨天帮助我!我完全明白了!谢谢:) –