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

求列表中所有连续'F'元素组成的子列表的长度

找出列表中连续'F'子列表的长度

需求说明

给定仅包含'T'和'F'元素的列表,提取所有由连续'F'组成的子列表,同时输出每个子列表的起始/结束索引和长度。

比如示例列表:

g = ['T','F','F','F','F','T','T','T','F','F','F','T']

对应的结果是:

  • 索引1-4的连续'F'子列表,长度为4
  • 索引8-10的连续'F'子列表,长度为3

实现方案(Python)

这里提供两种实用的实现方式:

方法1:遍历计数法

通过一次遍历列表,跟踪连续'F'的起始位置和当前长度,遇到'T'时结束计数并记录结果:

def find_consecutive_f(lst):
    result = []
    start_idx = None
    current_length = 0
    
    for idx, elem in enumerate(lst):
        if elem == 'F':
            if start_idx is None:
                start_idx = idx
            current_length += 1
        else:
            if start_idx is not None:
                result.append({
                    'start': start_idx,
                    'end': idx - 1,
                    'length': current_length
                })
                start_idx = None
                current_length = 0
    # 处理列表末尾是F的边界情况
    if start_idx is not None:
        result.append({
            'start': start_idx,
            'end': len(lst) - 1,
            'length': current_length
        })
    return result

# 测试示例
g = ['T','F','F','F','F','T','T','T','F','F','F','T']
output = find_consecutive_f(g)
for item in output:
    print(f"索引{item['start']}-{item['end']}的连续'F'子列表,长度为{item['length']}")

输出结果:

索引1-4的连续'F'子列表,长度为4
索引8-10的连续'F'子列表,长度为3

方法2:正则表达式法

把列表转换成字符串,用正则匹配连续的'F'序列,再通过字符位置映射回原列表索引:

import re

def find_consecutive_f_regex(lst):
    s = ''.join(lst)
    result = []
    # 匹配所有连续的F序列
    for match in re.finditer(r'F+', s):
        start = match.start()
        end = match.end() - 1
        length = end - start + 1
        result.append({
            'start': start,
            'end': end,
            'length': length
        })
    return result

# 测试示例
g = ['T','F','F','F','F','T','T','T','F','F','F','T']
output = find_consecutive_f_regex(g)
for item in output:
    print(f"索引{item['start']}-{item['end']}的连续'F'子列表,长度为{item['length']}")

这种方法代码更简洁,适合快速实现;缺点是如果列表规模极大,转换字符串会占用额外内存。


补充说明

两种方法都能处理所有边界场景:

  • 列表开头是'F'的情况
  • 列表末尾是'F'的情况
  • 多个不连续的'F'块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:27:28