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

求助:如何查找数组中第一个重复元素的索引

获取数组中第一个重复元素的索引

你的原代码用列表推导式会把所有重复元素的索引都收集起来——因为它会遍历整个数组,把所有满足item in input[:idx]的索引都纳入结果。要拿到第一个出现的重复元素的索引,可以换更高效的写法:

推荐方案:用集合追踪已出现元素

用循环遍历数组,同时用集合记录已经见过的元素,一旦碰到重复项直接返回当前索引,不用继续遍历:

def get_first_duplicate_idx(arr):
    seen = set()
    for idx, item in enumerate(arr):
        if item in seen:
            return idx
        seen.add(item)
    return -1  # 无重复元素时返回-1

# 测试示例
test_arr = [1, 2, 3, 2, 4]
print(get_first_duplicate_idx(test_arr))  # 输出3

简洁写法(用迭代器)

如果偏好一行式写法,可以用next()配合生成器表达式,找到第一个符合条件的索引就停止,避免生成整个索引列表:

first_dup_idx = next((idx for idx, item in enumerate(test_arr) if item in test_arr[:idx]), -1)

不过这个写法里item in test_arr[:idx]的时间复杂度是O(n),整体效率不如用集合的方案(集合查询是O(1))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:35:25