rainbow_enchanted 2018-10-31 16:03 采纳率: 0%
浏览 1829

Python如何优化循环问题?

我要生成长度为6~17的蛋白质,并且筛选出质量为1024的。当蛋白质序列长度到12时,质量的运算很慢很拖延时间,而我要在五分钟内得到结果,请问应该如何优化?

```import itertools
dic = {
'G':57,'A':71,'S':87,'P':97,'V':99,'T':101,'C':103,'I':113,'L':113,'N':114,'D':115,
'K':128,'Q':128,'E':129,'M':131,'H':137,'F':147,'R':156,'Y':163,'W':186} #质量字典的构建
mass = 0
n=0
m = 1024
aa = dic.keys()
string = ''
list_s = []
all_list = []
def Aii(i):
m = 1
for j in range(2,i+1):
m *= j
return m
for i in range(6,18): #长度为1024的蛋白质最少有6个氨基酸(5*186+94),最多有17个氨基酸(16*57+71)
for x in itertools.combinations_with_replacement(aa,i):
for p in x:
mass += dic[p]
if mass > m:
break
if mass == m:
list_s = [''.join(x)]
print list_s
all_list.append(list_s)
mass = 0

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-10-31 16:11
    关注

    你用itertools.combinations_with_replacement这里有大量无效的运算。
    因为如果一个组合的开头已经超过1024了,那么实际上没有必要再算下去,它和任何别的再组合都不可能符合条件。

    思路类似这个:https://bbs.csdn.net/topics/390360329

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算