索引运算符

时间:2014-04-19 10:01:56

标签: python python-3.x

有人可以向我解释原因:

print(my_list[-1])  

与:

相同
print (my_list[len(my_list) - 1])

这是如何避免写作的捷径

len(my_list)

由于

4 个答案:

答案 0 :(得分:4)

纯粹是因为Python将其定义为案例。负索引被视为从列表末尾(或字符串或元组)而不是从开始计数。引用the docs,引用my_list[i]和扩展表单my_list[i:j]my_list[i:j:k]

  

如果ij为负数,则索引相对于字符串的结尾:   len(s) + ilen(s) + j已被替换。但请注意-0仍为0.

实现序列协议的大多数第三方类型的行为方式相同,但请注意它们不是有义务 - 它只是内置序列的保证行为。

答案 1 :(得分:1)

支持负面索引是一个特定于对象的实现,设计列表对象的人支持它。并非所有对象都必须支持它。

您可以在listobject.c中找到实现的位置:

static PyObject *
list_subscript(PyListObject* self, PyObject* item)
{
    if (PyIndex_Check(item)) {
        Py_ssize_t i;
        i = PyNumber_AsSsize_t(item, PyExc_IndexError);
        ...
        if (i < 0)                          // 1
            i += PyList_GET_SIZE(self);     // 2
        return list_item(self, i);          // 3
        ...

如果索引是否定的,它将向其添加列表大小:

if i < 0:
  i += len(lst)

答案 2 :(得分:0)

执行print(my_list[-1])时,您将打印my_list的最后一个值。见切片的python。

执行print (my_list[len(my_list) - 1])时,您将打印my_list的最后一个值。 通过这种方式,您将获得len(my_list) - 1的正整数。

虽然len(my_list)返回my_list中的元素数量。请注意,python中的切片表示法以0开头,len计算以1开头的元素。

答案 3 :(得分:0)

lvc的答案很棒,但我想补充说这是一个捷径,因为 print (my_list[-1])的缩短时间比print (my_list[len(my_list) - 1])短,这是正确的做法。