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

博文

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

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

        序列反向和反向互补是进行生物信息分析的常见做法。为了实现序列的反向和者反向互补,可以采用不同的方法。这里使用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(seq)
print(obj_seq.rev)
print(obj_seq.rev_com)

"""
output
ori: GGCAGCAGCGACACnncancaacagctagcatgcaca
rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG
rc:  tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC
"""

        二. 用recursion实现DNA序列反向和反向互补。

def rev(seq):
    if seq == "":
        return ""
    else:
        return rev(seq[1:]) + seq[0]
    
def rev_com(seq):
    rc_dic = dict(zip('ATCGNatcgn', 'TAGCNtagcn'))
    if seq == "":
        return ""
    else:
        return rev_com(seq[1:]) + rc_dic[seq[0]]

    
seq = 'GGCAGCAGCGACACnncancaacagctagcatgcaca'
r   = rev(seq)
rc  = rev_com(seq)
print(seq)
print(r)
print(rc)

"""
output
ori: GGCAGCAGCGACACnncancaacagctagcatgcaca
rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG
rc:  tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC
"""

        两种实现方法,结果相同,在实际的工作中,可以灵活选择和使用。当然还可以采用replace,调用biopython库中的相关函数等来实现。



https://wap.sciencenet.cn/blog-3262030-1336978.html

上一篇:【Science】重大突破!小麦产量性状新基因被发现
下一篇:面向对象与递归实现DNA序列反向互补(二)
收藏 IP: 117.62.130.*| 热度|

0

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

数据加载中...

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

GMT+8, 2024-12-21 21:27

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部