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。
答案 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项,等等。一旦你习惯它,它实际上非常有用。