Python:列表索引中的列表超出范围错误

时间:2012-12-03 22:16:48

标签: python list indexing range

我在尝试将值附加到列表中的列表时遇到错误。我做错了什么?

xRange = 4
yRange = 3
baseList = []
values = []
count = 0

#make a list of 100 values
for i in range(100):
    values.append(i)

#add 4 lists to base list
for x in range(xRange):
    baseList.append([])
#at this point i have [[], [], [], []]

#add 3 values to all 4 lists
    for x in range(xRange):
        for y in range(yRange):
            baseList[x][y].append(values[count])
            count += 1

print baseList

#the result i'm expecting is:
#[[0,1,2], [3,4,5], [6,7,8], [9,10,11]]

我收到此错误:

Traceback (most recent call last):
  File "test.py", line 19, in <module>
    baseList[x][y].append(values[count])
IndexError: list index out of range

2 个答案:

答案 0 :(得分:5)

您不应该索引到空列表。您应该在列表中调用append

改变这个:

baseList[x][y].append(values[count])

对此:

baseList[x].append(values[count])

结果:

[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]

查看在线工作:ideone

答案 1 :(得分:1)

for x in range(xRange):
    baseList.append([])
# at this point i have [[], [], [], []]

对,baseList = [[], [], [], []]。因此,访问baseList[0][0]将失败,因为第一个子列表没有元素。

顺便说一下。您可以使用itertoolsrecipes

轻松获取所需列表
>>> x = 4
>>> y = 3
>>> list(itertools.islice(zip(*([itertools.count()] * y)), x))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]

这基本上是从0开始的无限计数的y- 石斑鱼的x- take