求列表中所有连续'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
相关产品推荐
相关产品推荐

