首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共识字符串&配置文件矩阵

共识字符串&配置文件矩阵
EN

Stack Overflow用户
提问于 2017-11-21 23:03:02
回答 2查看 2.2K关注 0票数 0

我编写了下面的python代码来解决Rosalind问题(http://rosalind.info/problems/cons/)之一,并且由于某种原因,Rosalind说答案是错误的,但是我做了一些抽查,它看起来是正确的。

问题如下:

代码语言:javascript
复制
Given: A collection of at most 10 DNA strings of equal length (at most 1 kbp) in FASTA format.

Return: A consensus string and profile matrix for the collection. (If several possible consensus strings exist, then you may return any one of them.)

一个样本数据集是:

代码语言:javascript
复制
>Rosalind_1
ATCCAGCT
>Rosalind_2
GGGCAACT
>Rosalind_3
ATGGATCT
>Rosalind_4
AAGCAACC
>Rosalind_5
TTGGAACT
>Rosalind_6
ATGCCATT
>Rosalind_7
ATGGCACT

一个样本解决方案是:

代码语言:javascript
复制
ATGCAACT
A: 5 1 0 0 5 5 0 0
C: 0 0 1 4 2 0 6 1
G: 1 1 6 3 0 1 0 0
T: 1 5 0 0 0 1 1 6

我试图解决这个问题:

代码语言:javascript
复制
from Bio import SeqIO

A,C,G,T = [],[],[],[]
consensus=""

for i in range(0,len(record.seq)):
    countA,countC,countG,countT=0,0,0,0
    for record in SeqIO.parse("fasta.txt", "fasta"):
        if record.seq[i]=="A":
            countA=countA+1
        if record.seq[i]=="C":
            countC=countC+1
        if record.seq[i]=="G":
            countG=countG+1
        if record.seq[i]=="T":
            countT=countT+1

    A.append(countA)
    C.append(countC)
    G.append(countG)
    T.append(countT)

    if countA >= max(countC,countG,countT):
        consensus=consensus+"A"
    elif countC >= max(countA,countG,countT):
        consensus=consensus+"C"
    elif countG >= max(countA,countC,countT):
        consensus=consensus+"G"
    elif countT >= max(countA,countC,countG):
        consensus=consensus+"T"

print("A: "+" ".join([str(i) for i in A]))
print("C: "+" ".join([str(i) for i in C]))
print("G: "+" ".join([str(i) for i in G]))
print("T: "+" ".join([str(i) for i in T]))

print(consensus)

如果有人能看一看我做错了什么,那就太好了?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-21 23:09:43

对于您的协商一致字符串,您的代码没有处理有领带的情况,也就是说,给定位置上的两个核苷酸是相同频率的。按照现在编写代码的方式,这种情况将不会导致在协商一致字符串中在该位置打印任何内容。

票数 1
EN

Stack Overflow用户

发布于 2020-07-12 17:42:07

在本部分中

代码语言:javascript
复制
 if countA >= max(countC,countG,countT):
            consensus=consensus+"A"
        elif countC >= max(countA,countG,countT):
            consensus=consensus+"C"
        elif countG >= max(countA,countC,countT):
            consensus=consensus+"G"
        elif countT >= max(countA,countC,countG):
            consensus=consensus+"T"

使用此方法,您将得到正确的一致性序列

代码语言:javascript
复制
if countA[i] >= max(countC[i],countG[i],countT[i]):
      consensus+="A"
  if countC[i] >= max(countA[i],countG[i],countT[i]):
      consensus+="C"     
  if countG[i] >= max(countA[i],countC[i],countT[i]):
      consensus+="G"
  if countT[i] >= max(countA[i],countC[i],countG[i]):
      consensus+="T"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47424178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档