搜索
查看: 264|回复: 3

基因组组装 求助python代码或解题思路

[复制链接]

1

主题

22

帖子

158

积分

注册会员

Rank: 2

积分
158
发表于 2019-9-3 10:04:27 | 显示全部楼层 |阅读模式
求助python代码或解题思路

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:R语言 GO/KEGG注释
下一篇:图形化开放式生信分析系统开发 - 3 生信分析pipeline的进化
回复

使用道具 举报

2

主题

14

帖子

579

积分

高级会员

Rank: 4

积分
579
发表于 2019-9-3 21:00:30 | 显示全部楼层
最近刚好做过这个题,用了一个比较粗暴的方法,思路是取其中一条序列与其他序列用错位的方法比较,找到重叠区最长的那条然后合并,迭代与剩余的序列继续比较

[Python] 纯文本查看 复制代码
import os
import pandas as pd
import numpy as np
import types

def compare_two(a:str,b:str) ->str:
    # 计算两条序列的长度
    al = len(a)
    bl = len(b)
    # 计算序列a 前后两端截取的位点
    d1 = [*range(al-2,-1,-1),*([0]*(bl-1)) ] 
    d2 = [ *[(al-1)]*bl, *range(al-2,0,-1)]
    # 计算序列b 前后两端截取的位点
    c1 = [*([0]*al), *range(1,bl-1,1)]
    c2 = [ *range(1,bl,1),*[bl-1]*(al-1)]
    # 循环 比较两条序列
    #print(f"{a}\n{b}")
    tl = al +bl
    shot_seq = ""
    pos = [0,0,0,0]
    for x1,x2,y1,y2 in zip(d1,d2,c1,c2):
        if a[x1:x2] == b[y1:y2]: # 判断两条序列是否为包含关系    
            if (x1>=y1 and (al-x1)>=bl) or (y1>=x1 and (bl-y1)>=al):
                s= a if al > bl else b
                #print(s)
            elif x1 >=y1: # 判断两条序列为错位关系,并且a在b前
                s = a+b[y2+1:]
            elif y1 > x1: # 判断两条序列为错位关系,并且b在a前
                s = b+a[x2+1:]
            if tl > len(s):
                tl = len(s)
                shot_seq = s
                pos = [x1,x2,y1,y2]
                
    # 打印最短序列
    return(shot_seq, pos)


[Python] 纯文本查看 复制代码
# 获得第一个值
k1 = list(res.keys())[0]
v1 = res[k1]
res.pop(k1)
while res:
    key1 = ""
    s1 = ""
    l = 0
    for key, value in res.items():
        # print(key)
        s = compare_two(value,v1)
        # print(s)
        #重合区域长度
        l1 = s[1][1] - s[1][0]
        if  l1>l:
            l = l1
            key1 = key
            s1 = s[0]
            # print(s[0])
            # print(key)
    # 找到重合区域最长的那个
    #if s1:
        #print(s1)
    v1 = s1
        #print(key1)
    res.pop(key1)

回复 支持 反对

使用道具 举报

1

主题

22

帖子

158

积分

注册会员

Rank: 2

积分
158
 楼主| 发表于 2019-9-6 10:06:08 | 显示全部楼层
海底钢琴 发表于 2019-9-3 21:00
最近刚好做过这个题,用了一个比较粗暴的方法,思路是取其中一条序列与其他序列用错位的方法比较,找到重叠 ...

你好:
       你的代码是不是没给全?res是什么?
另外这些“import os; import pandas as pd; import numpy as np; import types;”是不是没有用到呀? 没看懂你的代码。 你的代码写的很简洁,一看就是python方面的‘资深专家’,我是刚入门python的‘菜鸟’,方便的话能不能加个好友?(QQ:853752384;微信:shark05250120也行)最近我也在Rosalind上面刷题,刷到目前这道题的时候就刷不动啦!咱们可以一起学习!哈哈
回复 支持 反对

使用道具 举报

2

主题

14

帖子

579

积分

高级会员

Rank: 4

积分
579
发表于 2019-9-6 10:45:28 | 显示全部楼层
抱歉粘贴代码的时候漏掉了序列文件读取的代码,在上面两段代码之间加上这段就好,最后结果是变量V1。加载的包基本没用,因为我也是刚学python是个纯菜鸟,碰巧做这个题,习惯性的加载常用包,很多变量命名也不标准。

[Python] 纯文本查看 复制代码
res = {}
with open("rosalind_long.txt" , "r")  as f:
    for s in f:
        if s.startswith(">"):
            name = s.strip(">|\n")
            res[name] =""
        else:
            res[name] += s.strip(">|\n")

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-9-21 09:34 , Processed in 0.033679 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.