python - 如何编写字符串算法
问题描述
给定一个 FASTA 文本文件 (Rosalind_gc.txt),我应该检查每个 DNA 记录并确定鸟嘌呤-胞嘧啶 (GC) 含量的百分比 (%)。
这方面的例子是:
样本数据集:
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT
样本输出:
罗莎琳德_0808 60.919540
所以基本上遍历每个字符串,计算 G/C 出现的次数,然后将总数除以每个字符串的长度。我的问题是学习如何识别代码中的中断(即 >Rosalind_6404 )。我想要一个不使用 Biopython 和 biopython 方法的代码示例。
解决方案
您可以逐行读取文件并将序列数据累积到以“>”开头的下一行(再加上一次文件末尾)
def getCount(seq):
return seq.count("G")+seq.count("C")
with open("input.txt","r") as file:
sequence = ""
name = ""
for line in file:
line = line.strip()
if not line.startswith(">"):
sequence += line
continue
if name != "":
print(name, 100*getCount(sequence)/len(sequence))
name = line[1:]
sequence = ""
print(name, 100*getCount(sequence)/len(sequence))
# Rosalind_6404 53.75
# Rosalind_5959 53.57142857142857
# Rosalind_0808 60.91954022988506
推荐阅读
- c++ - 使用 C++ 创建特殊的二叉搜索树
- angular - 在 ng serve 构建 Angular 库
- reactjs - react 会重新渲染只有状态的某些部分发生变化的孩子,还是所有使用状态的孩子都被重新渲染?
- gradle - 使用 Gradle 工具 api 以编程方式获取 Gradle 插件
- python - python - 为什么循环不会在python中的if子句条件上跳转索引?
- html - 屏幕中的px单位宽度分辨率问题
- c# - Tizen.NET NfcCardEmulation 抛出 UnsupportedException(具有附加权限)
- css - 在视口底部固定元素定位 - 不诉诸位置:固定(纯 CSS 解决方案)
- sql - 如何在没有错误缩进的情况下正确格式化 SQL 文件?
- javascript - 单击扩展程序的图标时,有没有办法添加 HTML