求助

求助

请问一下,Python的sort方法好像只能有小到大排序,是否有一个方法可以简单的按照由大到小排序呢?我的数组是:
    0.880358    0.103257    0.003759         9.8528
    0.885149    0.306655   -0.006350         9.8314
    0.377773    0.005761    0.010151        10.6340
    0.511684    0.003042    0.016340         8.5147
    0.014145    0.111470    0.014791         7.7376
    0.423871    0.008137    0.050363        10.0915
    0.932596    0.295023    0.053541         8.0680
    0.473763    0.020082    0.071265        10.0123
    0.908122    0.101864    0.074547         9.6880
    0.972537    0.091851    0.070882        11.0385
    0.672463    0.304742    0.064784        10.1806
    0.885421    0.304311    0.073693        10.2768
    0.052728   -0.000878    0.086758         7.6469
这种类型,想按照第四列由大到小的形式重新排序整个数组。非常感谢好心人帮忙!!

另外,再问一个弱智问题,请问读文件时,我用的是readline方法,再用split想把上面的四个浮点数分开,意思上是想让电脑明白我读进来的是一个二维数组,可是现在我读进来的都是string类型,电脑告诉我不能排序。请问一下,读文件时,电脑怎么read number啊??拜托了。
这样做可以不?
比如

[Copy to clipboard] [ - ]
CODE:
>>> l=[[0.880358,0.103257,0.003759,9.8528],[0.885149,0.306655,-0.006350,9.8314]]
>>> print l[0][3],l[1][3]
9.8528 9.8314

排序的话就手动解决,不用内建的sort吧,不知道行得通不,没时间做测试了...

但现在我的问题是,我必须从一个文件里面读取数据,那个数组有将近上千行,如果手动输入,或者手动排序的话,很难实现啊?

谢谢帮助!
那可以考虑下Numeric库,应该可以解决。


[Copy to clipboard] [ - ]
CODE:
a=[1,2,3]
a.reverse()
a
[3, 2, 1]

先按字符串来读,然后使用int来转换为数字。
给个完整的代码:

[Copy to clipboard] [ - ]
CODE:
f=open('a.txt','r')
a=f.readlines()
f.close()
unsort=[]
sort=[]
for i in a:
    unsort.append(i.split())
m=[]
for i in unsort:
    m.append([float(i[3]),i[3]])

m.sort(reverse=True)    #从大到小,反之用reverse=False
for i in m:
    for j in unsort:
        if i[1]==j[3]:
            sort.append(j)
            continue
for i in sort:
    for j in i:
        print "%s\t"%j,
    print

顺便问下,如何在回复中将代码框起来?
新手,大家别见笑!
非常感谢tyljs的帮助。我先试试看。
感谢tyljs和limodou的帮助,现在我知道可以用a.sort(),再接着用a.reverse()来解决由大到小的排序问题。
但是我试了tyljs的code,其中m.sort(reverse=True)这句好像不行咧。会提示 sort() takes no keyword arguments 的出错信息,请问是什么原因呢?多谢多谢。

不必客气!我也是刚刚学,大家互相进步!
在我机器上运行没有问题,我是 Python 2.4.3。查了下手册,sort(cmp=None,key=None,reverse=False),其中key和reverse是2.4才开始支持的。