擅长:python、mysql、java
<p><code>li[-1]</code>是列表中的最后一项,因此是最近附加到列表末尾的项:</p>
<pre><code>>>> li = [1, 2, 3]
>>> li.append(4)
>>> li[-1]
4
</code></pre>
<p>如果您需要的是索引,而不是项,那么<code>len(li) - 1</code>就很好,而且非常有效(因为<code>len(li)</code>是在恒定时间内计算的—请参见下文)</p>
<hr/>
<p>在CPython的源代码中,列表的<code>len</code>映射到<code>Objects/listobject.c</code>中的函数<code>list_length</code>:</p>
<pre><code>static Py_ssize_t
list_length(PyListObject *a)
{
return Py_SIZE(a);
}
</code></pre>
<p><code>Py_SIZE</code>只是一个宏,用于访问所有Python对象的size属性,定义于<code>Include/object.h</code>:</p>
<pre><code>#define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size)
</code></pre>
<p>因此,<code>len(lst)</code>本质上是一个单指针解引用。</p>