生信刷题之ROSALIND——Part 5 (PERM, PRTM, REVP)

news2024/11/22 13:55:53

公众号搜索《生信er》,内容更多,更精彩~

目录

  • 公众号搜索《生信er》,内容更多,更精彩~
  • 1、Enumerating Gene Orders
    • Problem
    • Sample Dataset
    • Sample Output
    • example
    • Code
    • Output
  • 2、Calculating Protein Mass
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 3、Locating Restriction Sites
    • Problem
    • Sample Dataset
    • Sample Output
    • example
    • Code
    • Output

1、Enumerating Gene Orders

Problem

点突变可以在同一物种的生物群体中产生变化,但它们缺乏创造和分化整个物种的能力。基因组重排(Genome rearrangement)是一种主要的基因组突变,通常是由减数分裂或有丝分裂后细胞分裂的错误引起的。这些对染色体结构的大规模改变几乎总是有害的,通常会导致发育中的生物体死亡或不育,但在极少数情况下,它们提供了显著的优势。

因为影响物种进化的重排很少发生,两个密切相关的物种将有非常相似的基因组。因此,为了简化两个这样的基因组的比较,研究人员首先从物种中找出相似的DNA片段,称为synteny blocks。随着时间的推移,基因组重排创造了这些块,并将它们在两个基因组之间来回移动(通常将这些块分离到不同的染色体上)。

因此,我们可以用一个正整数来标记每个synteny blocks;当比较两个物种的基因组/染色体时,我们只需要指定其编号的synteny blocks的顺序。

Given: 一个正整数 n≤7。

Return: 长度为n的排列的总数,后面是所有排列组合(以任意顺序排列)。

Sample Dataset

3

Sample Output

6
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

example

类似于数据结构中的全排列
解决方法:递归法
以{1,2,3}为例,它的排列是:
以1开头,后面接着{2,3}的全排列,
以2开头,后面接着{1,3}的全排列,
以3开头,后面接着{1,2}的全排列。

Code

# Enumerating Gene Orders
from itertools import permutations


# permutations 返回可迭代对象的所有数学或者字符的全排列方式
def get_permutations(n):
    seq_list = []
    for i in range(n):
        seq_list.append(i + 1)
    seqs = list(permutations(seq_list, n))
    print(len(seqs))
    for seq in seqs:
        print(" ".join(str(m) for m in seq))


get_permutations(3)

with open("rosalind_perm.txt", "r") as f:
    num = f.read().strip()
    num = int(num)
    get_permutations(num)

Output

6
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

720
1 2 3 4 5 6
1 2 3 4 6 5
...........
6 5 4 1 3 2
6 5 4 2 1 3
6 5 4 2 3 1
6 5 4 3 1 2
6 5 4 3 2 1

2、Calculating Protein Mass

Problem

在加权字母表中,每个符号都被赋予一个正实数,称为权重。由加权字母表中符号形成的字符串称为加权字符串,其权重等于其符号的权重之和。
分配给20个符号的氨基酸字母的每个成员的标准重量是相应的氨基酸的单异构质量。

Given: 一个蛋白质串P,长度最多为1000 aa。

Return: P的总重量。

# Monoisotopic mass table
A   71.03711
C   103.00919
D   115.02694
E   129.04259
F   147.06841
G   57.02146
H   137.05891
I   113.08406
K   128.09496
L   113.08406
M   131.04049
N   114.04293
P   97.05276
Q   128.05858
R   156.10111
S   87.03203
T   101.04768
V   99.06841
W   186.07931
Y   163.06333 

Sample Dataset

SKADYEK

Sample Output

821.392

Code

# Monoisotopic mass table

def get_mass(protein):
    mass_table = {
        "A": 71.03711,
        "C": 103.00919,
        "D": 115.02694,
        "E": 129.04259,
        "F": 147.06841,
        "G": 57.02146,
        "H": 137.05891,
        "I": 113.08406,
        "K": 128.09496,
        "L": 113.08406,
        "M": 131.04049,
        "N": 114.04293,
        "P": 97.05276,
        "Q": 128.05858,
        "R": 156.10111,
        "S": 87.03203,
        "T": 101.04768,
        "V": 99.06841,
        "W": 186.07931,
        "Y": 163.06333
    }
    mass = 0
    for aa in protein:
        mass += mass_table[aa]
    mass = "%.3f" % mass
    return mass


sample = "SKADYEK"
print(get_mass(sample))

with open("rosalind_prtm.txt", "r") as f:
    string = f.read().strip()
    print(get_mass(string))

Output

821.392
115879.301

3、Locating Restriction Sites

Problem

限制性核酸内切酶是可以识别并附着特定的脱氧核苷酸序列,并在每条链中特定部位的两个脱氧核糖核苷酸之间的磷酸二酯键进行切割的一类酶,简称限制酶。限制酶识别DNA序列中的回文序列,回文序列是一种旋转对称结构,在轴的两侧序列相同而反向,特点是在该段的碱基序列的互补链之间正读反读都相同。例如,GCATGC就是一个回文序列,因为它的反向补码也是GCATGC。

Given: FASTA格式的长度最多为1 kbp的DNA字符串。

Return: 在长度为4和12之间的字符串中,每个反向回文的位置和长度。可以按任何顺序输出。

Sample Dataset

>Rosalind_24
TCAATGCATGCGGGTCTATATGCAT

Sample Output

4 6
5 4
6 6
7 4
17 4
18 4
20 6
21 4

example

从第四个碱基开始,长度为6的序列为回文序列。其中注意DNA的互补链序列,取互补碱基之后,需要再反转一下。
**原始:**TCA ATGCAT GCGGGTCTATATGCAT
互补: TACGTA
最终: ATGCAT

注意:回文序列与计算机中的回文字符串并不一样!
回文字符串是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文字符串。

Code

# Locating Restriction Sites

def read_fasta(file):
    """读取数据"""
    sequences = {}
    with open(file, "r") as f:
        for line in f.readlines():
            line = line.strip()
            if line[0] == ">":
                name = line[1:]
                sequences[name] = ""
            else:
                sequences[name] += line
    return sequences


def get_other_seq(sequence):
    """获得DNA互补序列"""
    sequence = sequence[::-1]
    other_seq = ""
    for base in sequence:
        if base == "A":
            other_seq += "T"
        elif base == "T":
            other_seq += "A"
        elif base == "C":
            other_seq += "G"
        elif base == "G":
            other_seq += "C"
    return other_seq


def get_result(seq):
    for i in range(len(seq)):
        # 限制回文字符串的长短
        for j in range(4, 13):
            if i + j <= len(seq):
                cut = seq[i:i + j]
                if cut == get_other_seq(cut):
                    # print(cut)
                    # print(get_other_seq(cut))
                    print(i + 1, j)


seqs = read_fasta("rosalind_revp.txt").values()
seqs = list(seqs)[0]
get_result(seqs)

Output

1 4
1 6
2 4
2 6
3 4
4 4
...
890 6
891 4
898 4
909 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品经理如何分析业务需求

目录 背景方案一&#xff1a;汇总所有推课的功能二&#xff1a;设置推课机器人的方法三&#xff1a;方法之间的关系四&#xff1a;方法合并五&#xff1a;方法汇总 总结 背景 现在我们开始设计第三版AR***&#xff0c;我负责的部分是推课部分&#xff0c;在领导的一步步引导之…

51单片机(十二)AT24C02(I2C)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

车企招聘高薪车载开发岗位,如何抓住机会进入该领域?

随着智能化、电动化和网联化的趋势不断加强&#xff0c;车载应用正在成为汽车和信息技术产业的一个重要领域。未来的车载应用将会实现智能驾驶、舒适性、智能信息娱乐等领域的创新&#xff0c;为车辆和车主带来更好的用户体验。 从行业来看&#xff0c;车载应用的相关企业不断…

Azkaban学习——单机版安装与部署

目录 1.解压改名 2.修改装有mysql的虚拟机的my.cnf文件 3.重启装有mysql的虚拟机 4.Datagrip创建azkaban数据库&#xff0c;执行脚本文件 5.修改/opt/soft/azkaban-exec/conf/azkaban.properties文件 6.修改commonprivate.properties 7.传入mysql-connector-java-8.0.29…

最简单的helm教程

最简单的Helm教程 学习前置条件 你得了解Kubernetes&#xff0c;拥有实际的使用经验那是最好不过了 Helm是什么&#xff1f; 我们打开Helm的官网&#xff1a;Helm的官网 可以看到官网的第一页就告诉了我们Helm是什么。 **Helm是Kubernetes&#xff08;k8s&#xff09;的包…

第十二届蓝桥杯青少组省赛Python真题,包含答案

目录 一、选择题 二、编程题 第十二届蓝桥杯青少组省赛Python真题 一、选择题 第 1 题 单选题 设s="Hello Lan Qiao,执行print(s[4:11])输出的结果为 () 答案:D 第 2 题 单选题 循环语句for iin range (8,4,2) : 执行了几次循环 ()

进腾讯了,38k....

大家好&#xff0c;最近有一位老同学成功去了腾讯&#xff0c;特意找他要了一些面试相关的资料&#xff0c;内容涵盖测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、管理工具、Python基础、Selenium相关、性能测试、LordRunner相关等质量非常高&#xff01;&…

SM2椭圆曲线公钥密码算法--密钥对与数字签名

1. SM2国密算法介绍 SM2算法全称是SM2椭圆曲线公钥密码算法&#xff08;SM是商用密码的拼音缩写&#xff09;&#xff0c;是一种基于“椭圆曲线”的密码ECC(Elliptic Curve Cryptography)。2016年&#xff0c;SM2成为中国国家密码标准。 在商用密码体系中&#xff0c;SM2主要用…

超详细,多图 PVE 安装 OpenWRT 教程(个人记录)

前言 - 写这个的目的是因为本人健忘所以做个记录以便日后再折腾时查阅。 - 本人笔拙如有选词&#xff0c;错字&#xff0c;语法&#xff0c;标点错误请忽视&#xff0c;大概率不会修改&#xff0c;我自己能看懂就好。 - 内容仅适用于本人的使用环境&#xff0c;不同环境请忽…

Java --- redis7之布隆过滤器BloomFilter

目录 一、布隆过滤器BloomFilter 1.1、面试题 1.2、 布隆过滤器简介 1.2.1、设计思想 1.3、特点 1.4、布隆过滤器原理 1.4.1、实现原理与数据结构 1.4.2、添加key、查询key 1.4.3、hash冲突导致数据不精准 1.4.4、三步骤 1.4.5、布隆过滤器误判&#xff0c;为什么不…

使用ncnn在树莓派4B上部署nanoDet-m网络(12fps)

1. 背景 在机器人的应用中&#xff0c;目标检测是一个重要的课题。深度学习的快速发展&#xff0c;在检测的效果方面对比大多数传统检测算法&#xff0c;都有明显的优势。但是将深度学习模型部署到端侧设备上&#xff0c;实现高效的推理&#xff0c;同样是一个问题很多的领域。…

1099 Build A Binary Search Tree(超详细注解+38行代码)

分数 30 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree…

Word+ChatGPT,一分钟完成周报总结作文

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 Office 的办公软件Word&#xff0c;是我们日常的文字工作的阵地。与ChatGPT的文字生成…

自学黑客【网络安全】,一般人我劝你还是算了吧

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习 我一直强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键…

6 # 实现简单的 promise

什么是 Promise &#xff1f; 在 JavaScript 中&#xff0c;Promise 是一种用于处理异步操作的对象&#xff0c;它可以更加优雅地处理回调函数嵌套和错误处理。 promise es6已经内部实现了&#xff0c; ie 不兼容 promise&#xff0c;需要 polyfill &#xff08;比如&#xf…

C++学习记录——이십이 红黑树

文章目录 1、了解概念2、模拟实现1、插入2、插入代码3、测试是否是红黑树 3、封装map、set 1、了解概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结…

Dcip的学习1-计算器

文章目录 前言一、配置安装环境1.1 网址1.2 再次打开需要进行的操作1.3 NodeJS控制台的操作1.4 出现的页面 二、Dcip生成计算器2.1 软件的基本单位 - Unitform中添加内容 2.2 OnleftChange(); 前言 只是为方便学习&#xff0c;不做其他用途&#xff0c; 一、配置安装环境 1.1 …

Jetpack之Navigation技术解密

Navigation是什么 官方的话&#xff1a; Navigation 是一个框架&#xff0c;用于在 Android 应用中的“目标”之间导航&#xff0c;该框架提供一致的 API&#xff0c;无论目标是作为 Fragment、Activity 还是其他组件实现。 自己的话&#xff1a; Navigation是管理Fragment…

win11、VS2019下配置PCL1.11.1

1、PCL安装配置 下载pcl-1.11.1-pdb-msvc2019-win64与PCL-1.11.1-AllInOne-msvc2019-win64.exe文件。以管理员身份运行PCL-1.11.1-AllInOne-msvc2019-win64.exe程序&#xff0c;截图如下&#xff1a; 安装过程中没有弹出OpenNI2的安装&#xff0c;但是要安装在3rdParty下&#…

MySQL空间查询

MySQL空间查询 文章目录 MySQL空间查询1. 空间数据支持2. 空间函数支持3. 操作示例3.1 创建表结构3.2 插入数据3.3 查询空间相交数据 4. 参考链接 1. 空间数据支持 MySQL 具有对应于 OpenGIS 类的空间数据类型。一些空间数据类型包含单个几何值&#xff1a; GEOMETRYPOINTLIN…