列出给出序列的crispr 引物

手动寻找cripsr 引物比较麻烦,而现在有些网站可以完成这一任务,但是,用python 去实现它也很简单。以下是脚本:

 1 #!/usr/bin/python
 2 # list all crispr-target(20 bp + NGG)
 3
 4 import re
 5 from Bio.Seq import reverse_complement
 6
 7 genome_seq = open("seq.txt")
 8 crispr_list = open("crispr_list.txt", "a")
 9
10 sequence = ""
11 for line in genome_seq:
12     sequence = sequence + line.rstrip("\n")
13
14 def GC_number(seq):
15     num_G = seq.count(‘G‘)
16     num_C = seq.count(‘C‘)
17     GC_number = num_G + num_C
18     return GC_number
19
20 for i in range(0, len(sequence)):
21     target = sequence[i:i+23]
22
23     if re.search(r‘[ATCG]{21}GG$‘, target):
24     start = i + 1
25     end   = i + 20
26         target = "+ " + target + " from " + str(start) + " to " + str(end) +  "---" + "GC_number = " +  str(GC_number(target))
27         crispr_list.write(target + "\n")
28     #print(target)
29
30 RC_sequence = reverse_complement(sequence)
31
32 for i in range(0, len(RC_sequence)):
33     target = RC_sequence[i:i+23]
34
35     if re.search(r‘[ATCG]{21}GG$‘, target):
36     start = i + 1
37     end   = i + 20
38         target = "- " + target + " from " + str(start) + " to " + str(end) +  "---" + "GC_number = " +  str(GC_number(target))
39         crispr_list.write(target + "\n")
40     #print(target)
41
42 genome_seq.close()
43 crispr_list.close()

理论上,这正则表达式更直接和简单,但是以下代码的结果远远少于上面方法的结果:

1 dna = sequence
2 runs = re.findall(r‘[ATCG]{21}GG‘, dna)
3 for match in runs:
4     #print(str(match))

目前还不是很清楚原因。

时间: 2024-10-13 21:13:00

列出给出序列的crispr 引物的相关文章

剑指offer: 栈的压入和弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) (1)如果下一个弹出的数字刚好是栈顶数字,那么直接弹出:(2)如果一下个弹出的数字不在栈顶,则把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶:(3)如果所有数字都压入栈仍然

栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 顺序为:push[middle]==pop[0];之后只能从middle--或middle++,一旦从end=size-1开始则只能end--. 1 class Solution { 2 public: 3 bool IsPopOrd

栈的压入、弹出序列-剑指Offer

栈的压入.弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 思路 需要一个辅助栈 如果下一个弹出栈的数字刚好是栈顶数字,那么直接弹出.若不是,把压栈序列中没有入栈的的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止.若所有数字都压入栈仍然没有找到下一个弹出的

剑指OFFER之栈的压入、弹出序列(九度OJ1366)

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 输入: 每个测试案例包括3行: 第一行为1个整数n(1<=n<=100000),表示序列的长度. 第二行包含n个整数,表示栈的压入顺序. 第三行包含n个整数,表示栈的弹出顺序. 输出: 对应每个测试案例,如果第二个序列是

剑指Offer-栈的压入、弹出序列

题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 思路: 将pushV中的元素依次压入栈中,并从头比较popV中的元素.若元素相同,则从栈中弹出该元素并向后移动popV,直到pushV中所有的元素都被压入栈中.若最终栈中元素为空,证明弹出顺序

数据结构-栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个顺序是否是该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但是4,3,5,1,2就不可能是. 分析:首先利用图像进行形象化的理解.可以发现其压入的顺序并不是所有的一次性压入.同时要考虑栈是否为空.以及其长度.这段代码写的很痛苦,继续训练. /* 剑指offer面试题22 */ #include <iostream> #include &

栈的压入、弹出序列——22

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈顺序,序列4.5.3.2.1是该压栈序列对应的一个弹出序列,但4.3.5.1.2就不可能是该压栈序列的弹出序列. 首先,可以在第一个序列也就是压栈顺序中找第二个序列中第一个元素,是4,因为第二个序列中第一个元素是第一个被弹出的,那么在压入顺序中,被弹出数据之前的所有数据都被压入了栈中且还没有被弹出,也就是连续压进去了1.2.3.4,然后弹出第一个

剑指Offer面试题22(Java版):栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压栈序列,序列,4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 解决这个问题很直观的想法就是建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈中弹出数字. 以弹出序列4,5,3,2,1为例分析压栈和弹出的过程.第一个希望被弹出的数字是4,因此4需

栈的压入和弹出序列(剑指Offer)

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 方法:通过一个辅助栈(这里用vector实现),模拟上面的操作, 规律:如果下一个弹出的数字刚好是栈顶元素,那么弹出:如果下一个弹出的数字不是栈顶元素,就把压栈序列中没有入栈的数字压入栈,直到把下一个