我知道li
可以访问列表的最后一个元素li[-1]
,但是它在后台如何工作?与li[len(li) - 1]
还有其他方法可以获取列表的最后一个元素,而实际上不知道列表的长度吗?我正在从效率的角度考虑这个问题,因此,如果存在其他麻烦的解决方案,请提出其他建议。
答案 0 :(得分:1)
您可能想阅读以下内容:
https://docs.python.org/2/faq/design.html#how-are-lists-implemented-in-cpython
它说,
CPython的列表实际上是可变长度数组,而不是Lisp样式 链表。该实现使用连续的引用数组 指向其他对象,并保持指向该数组和该数组的 列表头结构中的长度。
这就是为什么推荐li[-1]
且最有效的原因。
答案 1 :(得分:0)
li [-1]是最快且更Python化的方法。
您可以使用li [-n]从头开始获取 nth 元素,它只是按索引访问,实际上比li [len(li)-1 ]。
如果您在python中有一个列表,则给出长度,因此li [1]与li [-1]的工作方式相同。
答案 2 :(得分:0)
来自docs
形式语法没有对负索引中的特殊规定 顺序;但是,内置序列均提供 getitem () 通过添加长度来解释负索引的方法 到索引的顺序(以便x [-1]选择x的最后一项)。
是的,它在内部确实像-1 + len(li)
但是,这是踢脚线。 len是constant time/O(1) operation,与列表的长度无关。因此,负索引确实有效,并且确实是应该访问元素的正确方法。这就是为什么它在那里的原因。