我得到一个超出范围的列表

时间:2017-10-22 08:08:14

标签: python list class range

class Spillebrett:
    def __init__ (self, rader, kolonner):
        self._rader=rader
        self._kolonner=kolonner
        self._rutenett=[[]]

    def generer(self):
        for i in range(self._rader):
            for j in range(self._kolonner):
                rand=randint(0,3)
                if rand==3:
                    self._rutenett[i][j].settLevende()
  

文件“/mnt/c/skole/Oblig7/spillebrett.py”,第78行,发送者       self._rutenett [i] [j] .settLevende()IndexError:列表索引超出范围

我做错了什么?

2 个答案:

答案 0 :(得分:1)

考虑这个简单的例子:

item1 = 5
item2 = 5

newlist = []

for i in range(item1):
    newlist.append([])
    for j in range(item2):
        newlist[i].append((i,j))

newlist

返回:

[[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)],
 [(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)],
 [(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)],
 [(3, 0), (3, 1), (3, 2), (3, 3), (3, 4)],
 [(4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]]

我们也可以使用list comprehension来实现同样的目的:

item1 = 5
item2 = 5

newlist = [[(i,j) for j in range(item2)] for i in range(item1)]

newlist

答案 1 :(得分:0)

由于self._rutenett是列表的空列表,因此self._rutenett[i][j]超出范围。

使用self._rutenett.append()将不存在的成员添加到列表中(请注意,您不能有稀疏列表,即索引为2且不存在0& 1的成员使用字典或更好的是collections.defaultdict