免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Python 求助
最近访问板块 发新帖
查看: 2704 | 回复: 9
打印 上一主题 下一主题

求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-19 14:47 |只看该作者 |倒序浏览
请问一下,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啊??拜托了。

论坛徽章:
0
2 [报告]
发表于 2006-05-19 17:50 |只看该作者
这样做可以不?
比如

  1. >>> l=[[0.880358,0.103257,0.003759,9.8528],[0.885149,0.306655,-0.006350,9.8314]]
  2. >>> print l[0][3],l[1][3]
  3. 9.8528 9.8314
复制代码

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

[ 本帖最后由 loveddie 于 2006-5-19 18:00 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-05-19 19:12 |只看该作者
但现在我的问题是,我必须从一个文件里面读取数据,那个数组有将近上千行,如果手动输入,或者手动排序的话,很难实现啊?

谢谢帮助!

论坛徽章:
0
4 [报告]
发表于 2006-05-19 20:27 |只看该作者
那可以考虑下Numeric库,应该可以解决。

论坛徽章:
0
5 [报告]
发表于 2006-05-19 21:38 |只看该作者

  1. a=[1,2,3]
  2. a.reverse()
  3. a
  4. [3, 2, 1]
复制代码


先按字符串来读,然后使用int来转换为数字。

论坛徽章:
0
6 [报告]
发表于 2006-05-19 22:10 |只看该作者
给个完整的代码:

  1. f=open('a.txt','r')
  2. a=f.readlines()
  3. f.close()
  4. unsort=[]
  5. sort=[]
  6. for i in a:
  7.     unsort.append(i.split())
  8. m=[]
  9. for i in unsort:
  10.     m.append([float(i[3]),i[3]])

  11. m.sort(reverse=True)    #从大到小,反之用reverse=False
  12. for i in m:
  13.     for j in unsort:
  14.         if i[1]==j[3]:
  15.             sort.append(j)
  16.             continue
  17. for i in sort:
  18.     for j in i:
  19.         print "%s\t"%j,
  20.     print
复制代码

[ 本帖最后由 tyljs 于 2006-5-19 23:05 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-05-19 22:17 |只看该作者
顺便问下,如何在回复中将代码框起来?
新手,大家别见笑!

论坛徽章:
0
8 [报告]
发表于 2006-05-24 14:11 |只看该作者
非常感谢tyljs的帮助。我先试试看。

论坛徽章:
0
9 [报告]
发表于 2006-05-24 14:47 |只看该作者
感谢tyljs和limodou的帮助,现在我知道可以用a.sort(),再接着用a.reverse()来解决由大到小的排序问题。
但是我试了tyljs的code,其中m.sort(reverse=True)这句好像不行咧。会提示 sort() takes no keyword arguments 的出错信息,请问是什么原因呢?多谢多谢。

[ 本帖最后由 patriot_csu 于 2006-5-24 14:48 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-05-24 15:57 |只看该作者
不必客气!我也是刚刚学,大家互相进步!
在我机器上运行没有问题,我是 Python 2.4.3。查了下手册,sort(cmp=None,key=None,reverse=False),其中key和reverse是2.4才开始支持的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP