首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在列表[DNA序列]中迭代和匹配对以附加值

在列表[DNA序列]中迭代和匹配对以附加值
EN

Stack Overflow用户
提问于 2020-07-22 10:56:12
回答 1查看 85关注 0票数 0

你好,

我试图创建一个for循环来读取DNA序列的列表,并得到所有对的值。这样做的目的是读取当前和下一项,为该对的特定值对其进行数学计算,然后将其附加到最终列表中。这就是一个例子:

AA= 5

AT=6 AC=13

AG=8

CA= 6

TG= 12

...etc。

DNA_seq= A,A,C,A,T,G

这5对(AA,AC,CA,AT,TG)应该给我一个42的值。

所以,这就是我正在尝试的;我首先定义了一个方法来获得下一个项目:

(我知道有一个内置的下一个函数,但它也不起作用)

代码语言:javascript
复制
    def nextbase():
        next_base= next(base)
        return next_base

然后:

代码语言:javascript
复制
    AA=5
    AT=4
    AC=3
    AG=2
    TA=5
    TT=4
    TC=3
    TG=2
    CA=5
    CT=4
    CC=3
    CG=2
    GA=5
    GT=4
    GC=3
    GG=2
    
    stacking= []
    for strand in dsDNA:
        for b in strand:
            base= iter(b)
            if base =='A':
                if nextbase() == 'A':
                    append.stacking(AA)
                elif nextbase() == 'T':
                    append.stacking(AT)
                elif nextbase() == 'C':
                    append.stacking(AC)
                elif nextbase() == 'G':
                    append.stacking(AG)
            elif base=='G':
                if nextbase() == 'A':
                    append.stacking(GA)
                elif nextbase() == 'T':
                    append.stacking(GT)
                elif nextbase() == 'C':
                    append.stacking(GC)
                elif nextbase() == 'G':
                    append.stacking(GG)
            elif base=='c':
                if nextbase() == 'A':
                    append.stacking(CA)
                elif nextbase() == 'T':
                    append.stacking(CT)
                elif nextbase() == 'C':
                    print('yes')
                    append.stacking(CC)
                elif nextbase() == 'G':
                    append.stacking(CG)
            elif base=='T':
                if nextbase() == 'A':
                    append.stacking(TA)
                elif nextbase() == 'T':
                    append.stacking(TT)
                elif nextbase() == 'C':
                    append.stacking(TC)
                elif nextbase() == 'G':
                    append.stacking(TG)
            else:
                print('eror') 
    print(stacking)

但是,只是不起作用,它只会打印错误,因为它没有识别任何东西,有人知道是否有任何有效的方法来做到这一点?谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 11:12:03

这并不难做到:首先,用每对的“重量”创建一本字典。然后循环遍历dna序列并总结从该字典中检索到的值:

代码语言:javascript
复制
dict={'AA':5,
      'AT':4,
      'AC':3,
      'AG':2,
      'TA':5,
      'TT':4,
      'TC':3,
      'TG':2,
      'CA':5,
      'CT':4,
      'CC':3,
      'CG':2,
      'GA':5,
      'GT':4,
      'GC':3,
      'GG':2 }

DNA_seq= ['A','A','C','A','T','G']
total = sum([dict[DNA_seq[i]+DNA_seq[i+1]] for i in range(len(DNA_seq)-1) ])

print(total)
>>> 19
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63032594

复制
相关文章

相似问题

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