搜索
查看: 1158|回复: 8

【菜鸟Python练习9】[ROSALIND-SUBS] 寻找DNA Motif

[复制链接]

19

主题

66

帖子

577

积分

版主

Rank: 7Rank: 7Rank: 7

积分
577
QQ
发表于 2016-10-13 07:48:43 | 显示全部楼层 |阅读模式
本帖最后由 bioinfo.dong 于 2016-10-13 07:50 编辑

【9】Finding a Motif in DNA

*Perfect match不涉及复杂的算法,很容易做。有两种方法,一种是直接利用Python的regex模块,另一种就手动搜索



[Python] 纯文本查看 复制代码
### 9. Finding a Motif in DNA ###

# Method 1: Use Module regex.finditer
import regex
matches = regex.finditer('ATAT', 'GATATATGCATATACTT', overlapped = True)
for match in matches:
    print (match.start()+1)
    
    
# Method 2: Brute Force Search
seq = 'GATATATGCATATACTT'
pattern = 'ATAT'

def find_motif(seq, pattern):
    position = []
    for i in range(len(seq)-len(pattern)):
        if seq[i:i+len(pattern)] == pattern:
            position.append(str(i+1))
            
    print ('\t'.join(position))
    
find_motif(seq, pattern)


本帖子中包含更多资源

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

x



上一篇:【菜鸟Python练习8】[ROSALIND-PROT] RNA翻译成蛋白质
下一篇:affymetrix的表达芯片,为什么一个基因对应多个探针
You really shouldn't spend your time reinventing the wheel
回复

使用道具 举报

5

主题

24

帖子

161

积分

版主

Rank: 7Rank: 7Rank: 7

积分
161
发表于 2016-10-13 21:53:20 | 显示全部楼层
我目前perl one-line的还在处理输入的文本的水平上,当然任何perl程序都可以改成one line,但是那样一点也不简洁,感觉没有必要了
回复 支持 反对

使用道具 举报

19

主题

66

帖子

577

积分

版主

Rank: 7Rank: 7Rank: 7

积分
577
QQ
 楼主| 发表于 2016-10-13 22:53:47 来自手机 | 显示全部楼层
侠客行 发表于 2016-10-13 21:53
我目前perl one-line的还在处理输入的文本的水平上,当然任何perl程序都可以改成one line,但是那样一点也 ...

是的,说到点子上了,oneline写来方便,读起来麻烦,以前用perl的时候即使能用oneline我也尽量不用,我很喜欢Python的一点是它规范了很好的写作格式,比如该缩进的必须缩进,不然无法运行,这样维护和debug都容易很多
回复 支持 反对

使用道具 举报

5

主题

24

帖子

161

积分

版主

Rank: 7Rank: 7Rank: 7

积分
161
发表于 2016-10-16 22:39:00 | 显示全部楼层
bioinfo.dong 发表于 2016-10-13 22:53
是的,说到点子上了,oneline写来方便,读起来麻烦,以前用perl的时候即使能用oneline我也尽量不用,我很 ...

现在用python的人这么多和他的易读易维护分不开,我从github上查bioinformatics也是显示python的代码最多。但我感觉用perl处理起文字来确实也很方便 (我python仅学过一点,可能认识不到位。) 真是挺难取舍,要是能把二者的优点结合就好了。我现在用perl,估计过一段时间也要用python了,毕竟感觉社区还是挺重要的,要遵循大势啊!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2016-12-20 09:37:16 | 显示全部楼层
本帖最后由 ferfresh 于 2016-12-20 09:39 编辑

[Python] 纯文本查看 复制代码
>>> import re
>>> seq='GCATATATGTCAGTTCATAT'
>>> [i.start()+1 for i in re.finditer('(?=ATAT)',seq)]
[3, 5, 17]
回复 支持 反对

使用道具 举报

0

主题

2

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2016-12-20 10:13:09 | 显示全部楼层
好吧,原来你们是这样找motif的,还是只是一道练习题!
回复 支持 反对

使用道具 举报

19

主题

66

帖子

577

积分

版主

Rank: 7Rank: 7Rank: 7

积分
577
QQ
 楼主| 发表于 2016-12-21 03:47:54 | 显示全部楼层
北极星的菜菜 发表于 2016-12-20 10:13
好吧,原来你们是这样找motif的,还是只是一道练习题!

Just for Python practice ~
You really shouldn't spend your time reinventing the wheel
回复 支持 反对

使用道具 举报

64

主题

137

帖子

657

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
657
发表于 2017-5-11 21:19:08 | 显示全部楼层
刚开始学,只是简单的注释
[Python] 纯文本查看 复制代码
import re#一个正则表达式的模块
matches=re.finditer('ATAT','GATATGCATATACTT')#返回所有的匹配项
for match in matches:
    print (match.start()+1)#显示出现的位置,因为match.start计数从0开始,所以加1

http://www.cnblogs.com/tina-python/p/5508402.html这是re模块的详解
回复 支持 反对

使用道具 举报

0

主题

7

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2017-10-12 11:20:00 | 显示全部楼层
学习最快乐 发表于 2017-5-11 21:19
刚开始学,只是简单的注释
[Python] 纯文本查看 复制代码
import re#一个正则表达式的模块
matches=re.finditer ...[/quote]

你的代码跑出来只有两个值
应该在
[mw_shl_code=python,true]matches=re.finditer('ATAT','GATATGCATATACTT')

pattern改成'(?=ATAT)'
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2017-10-20 04:03 , Processed in 0.099506 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.