求布尔列表中连续True的最小出现次数技术咨询
解决布尔列表中连续True的最小出现次数问题
嘿,这个需求很清晰,咱们要从布尔列表里找出连续True片段的最短长度对吧?我给你分享两种靠谱的实现方案,都是Python的,你可以按需选用~
方法一:手动遍历统计
这是最直观的方式,自己控制遍历流程,一步步统计每段连续True的长度:
def min_consecutive_trues(bool_list): current_streak = 0 streak_lengths = [] for value in bool_list: if value: current_streak += 1 else: # 遇到False时,若之前有连续True,就记录长度并重置计数器 if current_streak > 0: streak_lengths.append(current_streak) current_streak = 0 # 别忘了处理列表末尾可能存在的连续True段(比如列表以True结尾的情况) if current_streak > 0: streak_lengths.append(current_streak) # 处理列表里完全没有True的边界情况 if not streak_lengths: return 0 # 你也可以根据需求改成返回None或者抛出提示 return min(streak_lengths)
测试你的示例用例
# 第一个测试用例 test_case_1 = [True, True, True, True, False, False, True, False, True, True, False] print(min_consecutive_trues(test_case_1)) # 输出:1 # 第二个测试用例 test_case_2 = [True, True, False, True, True, False, False, False, False, True, True, True] print(min_consecutive_trues(test_case_2)) # 输出:2
方法二:用itertools.groupby简化代码
如果不想手动写遍历逻辑,Python的itertools.groupby可以帮我们快速聚合连续的相同元素,代码会更简洁:
from itertools import groupby def min_consecutive_trues(bool_list): # 只筛选值为True的连续组,计算每组的长度 true_streaks = [len(list(group)) for key, group in groupby(bool_list) if key] # 同样处理没有True的边界情况 return min(true_streaks) if true_streaks else 0
这个方法的核心是groupby会把列表中连续相同的元素聚合成组,我们只保留key为True的组,统计每组长度后取最小值即可,一行列表推导式就搞定了统计部分~
补充说明
- 两种方法的时间复杂度都是O(n),只需要遍历列表一次,效率上没差别,选哪种全看你喜欢手动控制流程还是用工具类简化代码。
- 如果你的业务场景里需要处理“无True”的情况,可以自行调整返回值(比如返回
None或者自定义提示)。
内容的提问来源于stack exchange,提问作者Glenn C.
相关产品推荐
相关产品推荐

