按降序打印Python

时间:2013-03-01 19:12:23

标签: python sorting

我想使用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的值放在一个列表中,并像这样打印['']并且整个事情都没有被排序。

我需要帮助。谢谢!

2 个答案:

答案 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')