【问题标题】:Fixing the code in python / Bioinformatics修复 python / Bioinformatics 中的代码
【发布时间】:2018-04-20 05:06:07
【问题描述】:

我正在尝试修复以下代码。

  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)组成。怎么了?

【问题讨论】:

  • 你希望这段代码做什么?它不适用于 ________ 作为您的 while 循环条件。

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


【解决方案1】:

一种可能的解决方案(除其他外,可能更 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-...

【讨论】:

  • 感谢您的帮助 :) 如何使用 for 循环而不是 while 循环来运行此代码?
  • @berr 不客气。在了解与 while 的区别以及它们的共同点时,很容易应用 for 循环。您可以使用for 对变量进行计数,并在变量达到 1000 时结束。
【解决方案2】:

另一种方法是生成一个随机数列表,然后使用 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]

【讨论】:

    【解决方案3】:

    为什么不这样?

    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”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多