有没有一种简单的方法来获取我刚刚添加到列表中的项的索引?我需要跟踪上次添加的项目。
我想出了两个可能的解决方案:
# 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]
有没有技巧可以得到附加项的索引?
如果没有,你会用上面哪一个?为什么?你有什么建议吗?
你可以从两边为列表建立索引。最后一个元素的索引总是-1,不需要调用
len
。在开始处重复插入是非常低效的(需要将列表中的所有元素下移一个位置)。第三种可能的解决方案是对
list
进行子类划分并重写append
方法,以便它在调用时自动存储在类似mylist.last_added
的属性中。这种方法(如果扩展到其他列表方法)的优点是,您可以潜在地创建一个类,在该类中,它将跟踪最后添加的元素的索引,而不管使用的方法是什么(
insert
、append
,还是简单的mylist[some_index] = some_value
)。在list对象中嵌入此信息的另一个优点是,您可以传递它而不必担心名称空间(例如,即使列表是由
return
或yield
传递的,您也可以检索它)。li[-1]
是列表中的最后一项,因此是最近附加到列表末尾的项:如果您需要的是索引,而不是项,那么
len(li) - 1
就很好,而且非常有效(因为len(li)
是在恒定时间内计算的—请参见下文)在CPython的源代码中,列表的
len
映射到Objects/listobject.c
中的函数list_length
:Py_SIZE
只是一个宏,用于访问所有Python对象的size属性,定义于Include/object.h
:因此,
len(lst)
本质上是一个单指针解引用。相关问题 更多 >
编程相关推荐