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

如何用.index方法查找列表重复元素位置?附Spy Game函数问题

问题解答

一、查找列表中重复元素的位置

list.index()方法默认只会返回第一个匹配元素的索引,但可以通过指定start参数来查找后续的重复元素。比如你给出的例子mylist=[1,2,7,8,7,12],要获取第二个7的索引,写法如下:

mylist = [1,2,7,8,7,12]
first_7_idx = mylist.index(7)
second_7_idx = mylist.index(7, first_7_idx + 1)  # 从第一个7的下一个位置开始查找
print(second_7_idx)  # 输出4

如果要一次性获取所有匹配元素的索引,更通用的方式是用enumerate()遍历列表:

all_7_indices = [i for i, val in enumerate(mylist) if val == 7]
print(all_7_indices)  # 输出[2,4]

直接取列表的第二个元素all_7_indices[1]就能得到第二个7的索引。

二、优化Spy Game函数

你原有的函数逻辑存在缺陷:只对比了第一个0和第一个7的位置,完全没考虑第二个0的位置是否在第一个0之后、7之前。正确的思路是按顺序追踪目标序列[0,0,7]:遍历输入列表,每遇到目标序列里当前需要的元素,就把目标指针往后移一位,当指针走完整个目标序列时,就说明找到了符合要求的007顺序。

优化后的代码:

def spy_game(nums):
    target = [0, 0, 7]
    track_idx = 0  # 追踪目标序列的当前位置
    for num in nums:
        if num == target[track_idx]:
            track_idx += 1
            if track_idx == len(target):  # 匹配完整个007序列
                return True
    return False

测试示例:

  • spy_game([1,2,4,0,0,7,5]) → 匹配到0、0、7,返回True
  • spy_game([1,0,2,4,0,5,7]) → 匹配到0、0、7,返回True
  • spy_game([1,7,2,0,4,5,0]) → 仅匹配到单个0,未完成序列,返回False

这个逻辑能正确处理所有边界情况,比如[0,7,0,7]会返回False(第二个0在7之后,无法形成007顺序),[0,0,0,7]会返回True(只要有两个0在7之前即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:37:41