如何在Python中查找连续重复元素?统计连续3个H的出现次数
统计随机序列中连续3次"H"的次数的实现方案
能不能用index方法实现?
可以,但不是最优选择。index方法仅返回子串首次出现的位置,要统计所有出现(包括重叠情况)需要循环查找,还要处理找不到时的异常,不如直接遍历统计更直观高效。如果一定要用,可以结合循环和异常处理,或者用更安全的find方法(返回-1表示找不到)。
推荐实现方案
方案1:生成序列时实时统计(高效,无需存储整个序列)
这种方法在生成每个随机结果的同时跟踪连续H的次数,无需存储全部1000次结果,节省内存:
import random prob = ["H", "T"] streak_count = 0 current_h_streak = 0 for _ in range(1000): result = random.choice(prob) if result == "H": current_h_streak += 1 # 当连续H达到3次及以上时,每新增一个H就多一次连续3H的情况(比如HHHH包含2次连续3H) if current_h_streak >= 3: streak_count += 1 else: current_h_streak = 0 print(f"连续3次H的次数:{streak_count}")
如果需求是统计不重叠的连续3H段(比如HHHH只算1次),可修改判断逻辑:
if current_h_streak == 3: streak_count += 1 current_h_streak = 0 # 重置计数,避免重复统计
方案2:遍历已生成的序列统计
如果已经生成完整序列列表x,可直接遍历索引,检查每三个连续元素是否都是H:
import random prob = ["H", "T"] x = [] for _ in range(1000): x.append(random.choice(prob)) streak_count = 0 # 从第3个元素(索引2)开始,检查当前元素和前两个是否都是H for i in range(2, len(x)): if x[i-2] == "H" and x[i-1] == "H" and x[i] == "H": streak_count += 1 print("生成的序列:", x) print(f"连续3次H的次数:{streak_count}")
用index/find方法的实现
将列表转为字符串后,循环查找HHH的所有出现位置:
用find方法(推荐,更安全)
import random prob = ["H", "T"] x = [] for _ in range(1000): x.append(random.choice(prob)) seq_str = ''.join(x) streak_count = 0 current_pos = 0 while True: current_pos = seq_str.find('HHH', current_pos) if current_pos == -1: break streak_count += 1 current_pos += 1 # 加1处理重叠情况,无需重叠则改为current_pos +=3 print("生成的序列:", x) print(f"连续3次H的次数:{streak_count}")
用index方法(需处理异常)
import random prob = ["H", "T"] x = [] for _ in range(1000): x.append(random.choice(prob)) seq_str = ''.join(x) streak_count = 0 current_pos = 0 while True: try: current_pos = seq_str.index('HHH', current_pos) streak_count += 1 current_pos += 1 except ValueError: break # 找不到时抛出异常,终止循环 print("生成的序列:", x) print(f"连续3次H的次数:{streak_count}")
内容的提问来源于stack exchange,提问作者haintaki
相关产品推荐
相关产品推荐

