You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找列表中唯一值最后一次出现的索引,是否有更优实现方案?

列表唯一值最后一次出现索引的优化实现

你当前的实现可以正常运行,但存在两个可优化的点:

  • 时间复杂度偏高:每次调用a[::-1].index(i)都要遍历一次反转后的列表,整体时间复杂度为O(n*m)(n为原列表长度,m为唯一值数量),列表越大性能下降越明显
  • 操作冗余:已经调用了numpy的unique方法,完全可以用numpy原生参数直接得到结果,不需要手动计算索引

下面提供两种更优的实现方案:

方案1:纯Python无依赖实现(O(n)时间复杂度)

仅需一次正向遍历,用字典记录每个值最后一次出现的索引即可,性能最优,无第三方依赖:

a = [1,2,3,5,6,1,2,4,5]
if a:
    last_occur = {}
    for idx, val in enumerate(a):
        last_occur[val] = idx
    # 按唯一值升序排序,结果和示例输出顺序一致
    idx = [last_occur[v] for v in sorted(last_occur.keys())]

输出结果和示例完全一致:[5, 6, 2, 7, 8, 4]

方案2:numpy原生实现(简洁高效,适合大数据量)

numpy的unique方法本身就支持直接返回最后一次出现的索引,无需手动计算,代码更简洁,底层为C实现,处理大数组时效率远高于纯Python循环:

import numpy as np
a = [1,2,3,5,6,1,2,4,5]
if len(a) != 0:
    # keep='last'指定保留最后一次出现的记录,return_index=True返回对应索引
    unique_val, idx = np.unique(a, return_index=True, keep='last')

得到的idx直接就是需要的结果,输出为array([5, 6, 2, 7, 8, 4]),转成普通列表调用tolist()方法即可。


内容的提问来源于stack exchange,提问作者Rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:00:00