获取最近附加项目的索引

rom*_*oqj 12 python list

是否有一种简单的方法来获取我刚刚附加到列表中的项目的索引?我需要跟踪最后添加的项目.

我想出了两个可能的解决方案:

# Workaround 1
# The last added is the one at index len(li) - 1
>> li = ['a', 'b', 'c',]
>> li.append('d')
>> last_index = len(li) - 1
>> last_item = li[len(li) - 1]

# Workaround 2
# Use of insert at index 0 so I know index of last added
>> li = ['a', 'b', 'c',]
>> li.insert(0, 'd')
>> last_item = li[0]
Run Code Online (Sandbox Code Playgroud)

是否有获取附加项索引的技巧?

如果没有,你会使用以上哪些,为什么?你建议的任何不同的解决方法?

Eli*_*sky 20

li[-1] 是列表中的最后一项,因此最近附加到其末尾的项目:

>>> li = [1, 2, 3]
>>> li.append(4)
>>> li[-1]
4
Run Code Online (Sandbox Code Playgroud)

如果你需要索引,而不是项目,那么len(li) - 1就好了,非常有效(因为len(li)在恒定时间内计算 - 见下文)


在CPython的源,len用于列表被映射到功能list_lengthObjects/listobject.c:

static Py_ssize_t
list_length(PyListObject *a)
{
    return Py_SIZE(a);
}
Run Code Online (Sandbox Code Playgroud)

Py_SIZE只是一个用于访问所有Python对象的size属性的宏,定义Include/object.h如下:

#define Py_SIZE(ob)     (((PyVarObject*)(ob))->ob_size)
Run Code Online (Sandbox Code Playgroud)

因此,len(lst)本质上是单指针解除引用.