修复python / Bioinformatics中的代码

时间:2017-11-07 17:28:37

标签: python python-3.x for-loop while-loop bioinformatics

我正在尝试修复下面的代码。

  from pylab import *
    protein = ''
    amino_acids = ['P', 'G', 'L', 'A']
    while ________:
        protein += choice(amino_acids)

    if len(protein) == 1000:
        print(protein)

我想得到的结果是长度为1000的随机蛋白质,其包含四种给定的氨基酸(P,G,L和A)。有什么问题?

3 个答案:

答案 0 :(得分:4)

一种可能的解决方案(其中包括更多的pythonic)将是

from pylab import *
protein = ''
amino_acids = ['P', 'G', 'L', 'A']
while len(protein) <= 1000:
    protein = protein + choice(amino_acids)

print(protein)

在这里,您创建一个空字符串proteinwhile循环开始并附加amino_acids中的随机元素,直到达到字符串长度1000。

单行将是

proteins = ''.join([choice(amino_acids) for x in range(1000)])

此处,所谓的list comprehension用于从amino_acids生成1000个选项。 1000个元素存储为列表。应用join会将元素归结为单个字符串。

请注意,''表示我们不希望在氨基酸之间使用分隔符。使用例如'-'会导致类似

的结果
L-A-P-G-L-...

答案 1 :(得分:0)

另一种方法是生成一个随机数列表,然后使用for循环遍历随机数列表并附加到蛋白质字符串上。

import random
rand_num=[]
protein=''
amino=['P', 'G', 'L', 'A']

for i in range(1000):
    x=ranom.randint(0,(len(amino)-1))
    rand_num.append(x)

for index in rand_num:
    protein+=amino[index]

答案 2 :(得分:0)

为什么不呢?

import random

amino_acids = ['P', 'G', 'L', 'A']
N = 10  # should be 1000 in your case
protein = ''.join( aa for aa in random.choices(amino_acids, k=N) )

如上定义,蛋白质可以是“ PLLGAPAPGA”。