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
相关产品推荐
相关产品推荐

