搜索
查看: 3676|回复: 3

Python小测005

[复制链接]

8

主题

26

帖子

157

积分

注册会员

Rank: 2

积分
157
发表于 2017-11-6 23:38:32 | 显示全部楼层 |阅读模式
本帖最后由 546397641 于 2017-11-6 23:45 编辑

一段DNA序列,如果它的反向互补序列完全一样,则称之为“回文序列”。例子:
现有一段DNA序列:dna=TCAATGCATGCGGGTCTATATGCAT,求这条序列中的长度大小在4-12的所有回文序列在dna中的位置和长度?
结果:
4 6
5 4
6 6
7 4
17 4
18 4
20 6
21 4

回文序列

回文序列
回复

使用道具 举报

8

主题

26

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2017-11-7 23:55:15 | 显示全部楼层
st='TCAATGCATGCGGGTCTATATGCAT'
def every(st):
    list1=[]
    list2=[]
    a = ""
    for i in range(len(st)):
        for j in range(1,len(st)-i):
            list1.append(st[i:i+j])
    for k in set(list1):
        if len(k)>=4 and len(k)<=12:
            list2.append(k)
    return list2
def huiwen(dna):
    b=dna[::-1]
    c =""
    for i in b:
        if i == "A":
            c += "T"
        elif i == "T":
            c += "A"
        elif i == "C":
            c += "G"
        else:
            c += "C"
    if c == str(dna):
        return c
    else:
        pass
e = every(st)
for i in e:
    if huiwen(i) != None:
        #print(huiwen(i))
        for j in range(len(st)):
            if st.startswith(huiwen(i),j):
                print(j+1,len(huiwen(i)))
回复 支持 反对

使用道具 举报

0

主题

19

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2020-6-4 10:29:29 | 显示全部楼层
from Bio.Seq import Seq
import re
dna = Seq('TCAATGCATGCGGGTCTATATGCAT')
dna_list = []

a = 0
b =a + 4

while b < 13:
    dna_target = dna[a : b]
    for x in range(len(dna) - (b-a)+1):
        dna_target = dna[a : b]
        if dna_target == dna_target.reverse_complement():
            dna_list.append(dna_target)
        a += 1
        b += 1
    b = b - (len(dna) - (b-a)+1)
    a = 0
    b += 1
print(dna_list)
回复 支持 反对

使用道具 举报

0

主题

10

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2021-2-5 15:04:50 | 显示全部楼层
"""
寻在在一段序列中存在的回文序列,4~12
"""
from Bio.Seq import Seq


def find_hw(n, seq1):
    if n >= 4 & n % 2 == 0:
        dnaS = [seq1[i:i + n] for i in range(0, len(seq1) + 1 - n)]
        print(dnaS)
        for j in range(0, len(dnaS)):
            if Seq(dnaS[j][0: (n // 2)]).reverse_complement() == dnaS[j][(n // 2):]:
                print(j + 1, n)


def main():
    dna1 = 'TCAATGCATGCGGGTCTATATGCAT'
    m = 4
    # dnaS4 = [dna1[i:i + 4] for i in range(0, len(dna1) + 1 - 4)]
    # # for j in dnaS4:
    # #     if Seq(j[0:2]).reverse_complement() == j[2:]:
    # #         print(j, 4)
    # for j in range(0, len(dnaS4) + 1):
    #     if Seq(dnaS4[j][0:2]).reverse_complement() == dnaS4[j][2:]:
    #         print(j + 1, 4)
   
    find_hw(m, dna1)


if __name__ == '__main__':
    main()



只需调整m的值,4,6,8,10,12即可
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2021-3-3 17:27 , Processed in 0.026673 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.