chenchengfly的个人博客分享 http://blog.sciencenet.cn/u/chenchengfly

博文

面向对象与递归实现DNA序列反向互补(二)

已有 756 次阅读 2022-5-7 10:28 |个人分类:生物信息学|系统分类:科研笔记

        序列反向和反向互补是进行生物信息分析的常见做法。为了实现序列的反向和者反向互补,可以采用不同的方法。这里使用python语言,采用面向对象编程的for...loop结构和面向对象编程的递归(recursion)实现序列的反向与反向互补。关于面向对象编程(Best Practices of Object Oriented Programming (OOP) - GeeksforGeeks)和递归(Recursion - GeeksforGeeks),可以参考链接中的说明。

    一. 面向对象编程(OOP)中用for...loop实现DNA序列反向和反向互补。


class Seqfor:
    
    def __init__(self, seq):
        self.seq = seq
    
    @property
    def rev(self):
        rev_seq = ''
        for b in self.seq:
            rev_seq = b + rev_seq
        return rev_seq
    
    @property
    def rev_com(self):
        rc_dic = dict(zip('ATCGNatcgn', 'TAGCNtagcn'))
        rc = ''
        for b in self.seq:
            rc = rc_dic[b] + rc
        return rc

seq = 'GGCAGCAGCGACACnncancaacagctagcatgcaca'

obj_seq = Seqfor(seq)
print('for..loop ori:', seq)
print('for..loop rev:', obj_seq.rev)
print('for..loop rvs:', obj_seq.rev_com)

out1 = """
output
ori: GGCAGCAGCGACACnncancaacagctagcatgcaca
rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG
rvs:  tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC
"""


二. 面向对象编程(OOP)中用recursion实现DNA序列反向和反向互补。


class SeqRec:
    
    def __init__(self, seq):
        self.seq = seq
        self.seq_cp = seq
    
    @property
    def rev(self):
        if self.seq == "":
            return ""
        else:
            base = self.seq[0]
            self.seq = self.seq[1:]
            return self.rev + base
    
    @property
    def rev_com(self):
        rc_dic = dict(zip('ATCGNatcgn', 'TAGCNtagcn'))
        if self.seq_cp == "":
            return ""
        else:
            base = self.seq_cp[0]
            self.seq_cp = self.seq_cp[1:]
            return self.rev_com + rc_dic[base]
    

seq = 'GGCAGCAGCGACACnncancaacagctagcatgcaca'

obj_seq = SeqRec(seq)
print('recursion ori:', seq)
print('recursion rev:', obj_seq.rev)
print('recursion rvs:', obj_seq.rev_com)

out2 = """
output
ori: GGCAGCAGCGACACnncancaacagctagcatgcaca
rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG
rvs:  tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC
"""

        使用foo...loop不需要额外定义序列的复制属性,但使用recursion却需要定义,因为递归本身会对序列的值进行修改。



https://blog.sciencenet.cn/blog-3262030-1337416.html

上一篇:面向对象与递归实现DNA序列反向互补
下一篇:从"本手、妙手、俗手"的角度谈谈生物信息
收藏 IP: 58.213.25.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2022-8-10 22:24

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部