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

Python如何统计字符串中指定子串的最大连续出现次数(CS50 DNA习题)

CS50 DNA习题 最大连续STR次数统计实现

核心修改思路

你当前使用的str.count()会统计全部匹配子串,无法区分是否连续,我们通过正则匹配所有连续重复的STR片段来计算最大连续出现次数。

修改步骤

  • 首先在导入区添加正则模块引用:import re
  • 替换原有的STR计数循环逻辑,改用正则匹配统计

修改后完整代码

#!/usr/bin/env python3
import csv
import sys
import re
from cs50 import get_string

# 校验参数数量
if len(sys.argv) != 3:
    print("Usage: python dna.py data.csv sequence.txt")
    sys.exit(2)

# 读取数据库文件,提取STR列表
with open(sys.argv[1], "r") as database:
    data = list(csv.reader(database))
    STRS = data[0][1:]  # 直接跳过表头第一个的name字段,简化操作
    data.pop(0)

# 读取待匹配的DNA序列
with open(sys.argv[2], "r") as seq:
    sequence = seq.read()

sequenceCount = []

for s in STRS:
    # 匹配所有连续重复的当前STR片段
    repeat_fragments = re.findall(rf'(?:{s})+', sequence)
    if not repeat_fragments:
        max_repeat = 0
    else:
        # 最长片段长度除以STR长度得到连续重复次数
        max_repeat = max(len(frag) // len(s) for frag in repeat_fragments)
    sequenceCount.append(max_repeat)

print(STRS)
print(sequenceCount)

结果验证

用你提供的测试序列运行,最终得到的sequenceCount结果为[4, 1, 5],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:18:03