为什么这段代码在某些情况下会引发IndexError?

时间:2016-03-08 02:38:34

标签: python list python-3.x indexing

我的功能是这样的:

输入:

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。

我真的想知道为什么,因为我多次遇到过这个问题。

2 个答案:

答案 0 :(得分:5)

空列表就像0;无论你把它乘以什么,答案仍然是一个空列表。

>>> [] == []*8
True

[][x]会针对任何值IndexError提出x

答案 1 :(得分:1)

[None][]之间存在差异。 [None]是包含一个成员的列表,None。但是[]是一个空列表,其中包含成员。

执行[None] * input_num后,您创建了一个包含None成员的新列表,其次数为input_num次。

但是当你[] * input_num时,没有成员可以开始。因此,您仍然有一个自然无法编入索引的空列表。