为什么这不会导致Python中的数组越界错误?

时间:2011-12-01 18:06:30

标签: python

我对python知之甚少,但我对以下代码的工作感到惊讶:

import sys
prev =  [sys.maxint]*(5)
j = 0
print prev[j]
print prev[j-1]

总的来说,我认为第二个print语句会给我一个错误。为什么这样做?

我需要将一些python代码转换为C++,而在C++中这将无效。

4 个答案:

答案 0 :(得分:5)

mylist[-1]返回mylist的最后一项,mylist[-2]倒数第二项等。

这是设计的。阅读tutorial

答案 1 :(得分:2)

那是因为j - 1计算结果为-1,当用作python列表的索引时,表示最后一个元素。

答案 2 :(得分:2)

数组l的索引可以是[-len(l), len(l)-1]范围内的整数(注意:两端都包含)。您熟悉[0, len(l)-1]范围内的指数。范围[-len(l),-1]中的索引如下:在该范围内取i,然后l[i] == l[len(l) + i]。从本质上讲,负数从数组的末尾向后计数。

因此,prev[j-1] = prev[-1] = prev[len(prev) + -1] = prev[5 - 1] = prev[4]或数组中的最后一个元素。

答案 3 :(得分:1)

在python x [-1]中返回列表中的最后一个元素