You need to enable JavaScript to run this app. Python实现查找列表中恰好出现两次元素的全量对应索引
优惠活动
大模型
产品
解决方案
定价
更多

Python实现查找列表中恰好出现两次元素的全量对应索引

原代码的核心问题
  • 使用list(occurrances.values()).index(2)查找的逻辑存在天然局限性:index()方法只会匹配列表中第一个值为2的位置,后续所有出现次数为2的元素都会被遗漏,根本无法覆盖全量匹配项
  • 现有逻辑仅收集了符合条件的元素值本身,完全没有关联这些元素在原列表中的索引,和最初「返回对应全部索引」的需求不匹配
可行的实现方案

整体逻辑拆成两步,兼顾正确性与简洁性:

  1. 借助Counter的统计结果,一次性筛出所有出现次数恰好等于2的元素,存为集合实现O(1)快速查询
  2. 用enumerate遍历原始列表,匹配到目标元素时同步收集对应的索引位置

如果需要直接输出所有目标元素对应的索引集合,运行以下代码即可:

from collections import Counter

length = int(input())
user_input = [int(x) for x in input().split()]
# 筛选仅出现两次的元素作为目标集合
target_vals = {val for val, cnt in Counter(user_input).items() if cnt == 2}
# 枚举原列表收集对应索引
result = [idx for idx, val in enumerate(user_input) if val in target_vals]
print(result)

如果需要按元素分组存储每个值对应的索引,方便后续区分不同重复项的位置,可以调整为字典结构存储结果:

from collections import Counter, defaultdict

length = int(input())
user_input = [int(x) for x in input().split()]
val_count = Counter(user_input)
target_vals = {val for val, cnt in val_count.items() if cnt == 2}
index_res = defaultdict(list)
for idx, val in enumerate(user_input):
    if val in target_vals:
        index_res[val].append(idx)
print(dict(index_res))

补充说明:Counter本身是可迭代的键值对结构,不需要硬转成普通列表再通过index()匹配值,这种写法不仅会漏匹配多个符合条件的元素,也会增加不必要的列表转换开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 23:45:03