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

Python列表元素第n次出现位置查找及超额重复删除函数问题排查

1. 如何查找Python列表中某个元素第n次出现的位置?

可以通过遍历列表并计数的方式实现,当目标元素的出现次数达到n时,返回对应的索引:

def find_nth_occurrence(lst, target, n):
    occurrence_count = 0
    for idx, element in enumerate(lst):
        if element == target:
            occurrence_count += 1
            if occurrence_count == n:
                return idx
    return -1  # 若不存在第n次出现,返回-1

示例:

  • 调用find_nth_occurrence([1, 2, 1, 3, 1], 1, 3)会返回4,对应列表中第三个1的位置。
2. 修复delete_occurrences函数的问题

原代码的问题分析

  1. 遍历过程中修改原列表:直接对lst执行pop操作会打乱遍历的索引顺序,导致部分元素被跳过,无法正确处理所有重复项。
  2. 索引查找逻辑错误:lst.index(x, lst.index(x)+1)的写法仅能找到第二个x的位置,无法处理多次重复的情况,且列表修改后索引会失效。
  3. 重复计数效率低且逻辑混乱:每次循环调用lst.count(x)会重复遍历整个列表,且列表修改后计数结果会动态变化,导致判断逻辑出错。

正确实现方式

使用字典跟踪每个元素的保留次数,遍历原列表构建新结果列表,仅保留每个元素的前num次出现:

def delete_occurrences(lst, num):
    element_counts = {}
    result_list = []
    for item in lst:
        current_count = element_counts.get(item, 0)
        if current_count < num:
            result_list.append(item)
            element_counts[item] = current_count + 1
    return result_list

测试用例验证:

  • 传入([1, 1, 3, 3, 7, 2, 2, 2, 2], 3),返回结果为[1, 1, 3, 3, 7, 2, 2, 2],符合保留每个元素最多3次的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:45:43