Python,负值不在列表范围之外

时间:2013-10-03 18:37:31

标签: python list negative-number

class world:
    def __init__(self, screen_size):
        self.map = [[0 for col in range(500)] for row in range(500)]
        self.generate()

    def generate(self):
        for x in range(0, len(self.map[0])):
            for y in range(0, len(self.map)):
                kind = random.randint(0, 100)
                if kind <= 80:
                    self.map[x][y] = (random.randint(0, 255),random.randint(0, 255),random.randint(0, 255))
                else:
                    self.map[x][y] = (random.randint(0, 255),random.randint(0, 255),random.randint(0, 255))
        print self.map[50][50], self.map[-50][-50]
printing => (87, 92, 0) (31, 185, 156)

如果负值不超出范围,这怎么可能?它应该抛出IndexError。

3 个答案:

答案 0 :(得分:2)

使用负数从列表的后面开始并倒计时,这就是他们仍在工作的原因。

答案 1 :(得分:1)

我认为这可以通过演示得到最好的解释:

>>> a = [1, 2, 3, 4]
>>> a[-1]
4
>>> a[-2]
3
>>> a[-3]
2
>>> a[-4]
1
>>> # This blows up because there is no item that is
>>> # 5 positions from the end (counting backwards).
>>> a[-5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>

如您所见,否定索引将向后逐步通过列表。

为了进一步解释,您可以阅读本link的第3.7节,其中讨论了使用列表进行否定索引。

答案 2 :(得分:0)

当您索引到列表时,负值表示结尾的N值。所以,-1是最后一项,-5是结尾的第5项,等等。一旦你习惯它,它实际上非常有用。