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

Python列表连续重复值检测(回测场景):定位连续三次出现x的第三个元素索引

解决连续三次出现"x"的第三个元素索引提取问题

我来帮你搞定这个需求!你需要从只包含"x"和"y"的DataFrame中,精准找出连续三次出现"x"的第三个元素的索引,而且要避免在连续多个"x"的情况下重复触发(比如连续4个"x"时,只记录第3个的索引,之后重新开始检测)。下面给你两种实用的解决方案:

方法一:循环遍历+跳过机制(直观易懂)

这种方法逻辑清晰,适合快速理解需求的实现过程:

import pandas as pd

# 构造你提供的示例数据
data = {'value': ['y', 'x', 'y', 'x', 'x', 'x', 'x', 'y', 'x', 'x', 'x']}
df = pd.DataFrame(data)

result = []
skip_counter = 0  # 用于标记需要跳过的后续位置

for idx, val in enumerate(df['value']):
    if skip_counter > 0:
        skip_counter -= 1
        continue
    # 检查当前位置是否是连续三个x的第三个元素(需要确保索引>=2,能取到前两个元素)
    if idx >= 2 and df['value'].iloc[idx-2] == 'x' and df['value'].iloc[idx-1] == 'x' and val == 'x':
        result.append(idx)
        # 匹配成功后,跳过接下来的2个位置,避免重复检测
        skip_counter = 2

print(result)  # 输出: [5, 10]

逻辑说明:

  • 用skip_counter控制匹配后的跳过操作:当找到符合条件的索引后,接下来的2个位置直接跳过,确保不会在连续多个"x"时重复记录;
  • 循环中先判断是否需要跳过,再检查当前位置是否满足连续三个"x"的条件,满足则加入结果列表。

方法二:Pandas向量化操作(高效适合大数据)

如果你的DataFrame数据量很大,推荐用这种向量化方法,性能更优:

import pandas as pd

# 构造示例数据
data = {'value': ['y', 'x', 'y', 'x', 'x', 'x', 'x', 'y', 'x', 'x', 'x']}
df = pd.DataFrame(data)

# 第一步:标记所有连续三个x的第三个元素位置
three_x_mask = (df['value'] == 'x') & (df['value'].shift(1) == 'x') & (df['value'].shift(2) == 'x')

# 第二步:排除已匹配位置的后续2个位置,避免重复触发
# 把已匹配位置的后1位、后2位都设为False
filtered_mask = three_x_mask & ~three_x_mask.shift(1).fillna(False) & ~three_x_mask.shift(2).fillna(False)

# 提取符合条件的索引
result = df[filtered_mask].index.tolist()

print(result)  # 输出: [5, 10]

逻辑说明:

  • three_x_mask先筛选出所有满足连续三个"x"的第三个元素的位置;
  • filtered_mask通过移位操作,把已匹配位置的后1位、后2位排除在外,确保每个连续"x"序列只记录一次第三个元素的索引;
  • 最后提取过滤后的索引列表即可。

两种方法都能完美实现你想要的结果,你可以根据自己的场景选择合适的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:27:46