我想使用python以“f”的值的降序创建输出。也就是说,程序计算的“f”的最大值应首先打印,依此类推......
这是代码。
q=[-5.23,-0.22,3.35,-3.9,0.59,5.76,-3.27,2.95,0.68,-2.65,2.6,1.87,-0.68,2.77,0,-3.92,0,0.06,4.17];
w=[15.1,1.11,-0.85,0.00,-0.47,-4.00,3.63,-2.29,-1.96,1.16,0.00,-4.09,-2.77,-0.27,-2.14,1.86,0,2.32,-2.61];
e=[1.04,0,0,3.91,-0.53,-1.75,1.88,1.88,-0.22,2.81,0,-0.91,1.96,2.62,-2.67,0,0.06,-1.95,0.58,0];
r=[-6.8,0,-2.73,-1.81,1.38,1.76,0,-1.79,4.22,-1.3,-4.13,4.62,0,-0.66,6.2,-1.69,3.12,0.93,0];
import re
i=0;s=0;f=0;k=0;l=0;c=0;
regex = re.compile("(?=(AA[TCG].{20}))")
Str1=raw_input('get::')
l=regex.findall(xy)
for x in range(len(l)):
kl=l[x];c=kl[2:21];n=len(c);rest=kl[21:]
while(i<n):
f=0
if(c[i]=='A'):
s=q[i];
elif(c[i]=='G'):
s=w[i];
elif(c[i]=='C'):
s=e[i];
elif(c[i]=='T'):
s=r[i];
i+=1
f+=s
GC=c.count('G')+c.count('C')
GC_p=GC*100/19
if(f>0 and GC_p>=45 and GC_p<=55):
print '======================================================================'
print 'AA-'+c+'-'+rest
print 'Score=',f
print 'GC%=',float(GC_p)
print 'SENSE RNA=AA-'+c[::-1]+'-'+rest
print 'ANTI-SENSE RNA=AA-'+c.replace('A','U').replace('C','G').replace('G','C').replace('U','A')+'-'+rest
print '======================================================================='
print ('\r\n')
GC=0
k+=1
i=0
h=raw_input('Enter to continue')
我试图将f的值附加到列表中并按降序排序。但是它只将f的值放在一个列表中,并像这样打印['']并且整个事情都没有被排序。
我需要帮助。谢谢!
答案 0 :(得分:1)
正如问题中显示的那样,您的代码似乎计算了f
的一个值。由于代码不会计算具有不同f
值的对象列表,因此我无法给出具体示例,但我们假设您创建了一个名为results
的列表,其中包含元组或对象拥有f
值的元素或属性。然后,如下所示之一的行会根据results
的值将f
的元素按降序排序:
results.sort(key=lambda x: -x[f_index])
results.sort(key=lambda x: -x.f)
results.sort(key=lambda x: x.f, reverse=True)
使用元组的第一个表单,用适当的值代替f_index
。 (例如,如果元组的第三个元素是f
,请说-x[2]
。)如果定义了具有f
属性的对象类,请使用第二个或第三个形式。您可以使用-f作为键(如前两种形式)或可以设置reverse=True
。
编辑:注意,while(i<n):
循环中的代码很笨拙。您可以按如下方式替换它:在for x in range(len(l)):
行之前,添加行
weights = { 'A': q, 'G': w, 'C': e, 'T': r }
然后将while(i<n):
到f+=s
的12行代码替换为两行
for i in range(n):
f += weights[c[i]][i]
答案 1 :(得分:1)
将其添加到程序的开头:
result = []
将您的print
部分替换为:
result.append( (f, c, rest, GC_p) )
然后在循环后添加:
for (f, c, rest, GC_p) in result:
print '======================================================================'
print 'AA-'+c+'-'+rest
print 'Score=',f
print 'GC%=',float(GC_p)
print 'SENSE RNA=AA-'+c[::-1]+'-'+rest
print 'ANTI-SENSE RNA=AA-'+c.replace('A','U').replace('C','G').replace('G','C').replace('U','A')+'-'+rest
print '======================================================================='
print ('\r\n')