作者mantour (朱子)
看板Python
标题Re: [教学] 排序问题
时间Mon Nov 16 22:11:31 2009
sort可以传入自订的比较函式进去
例如你是想要把 . 後面的数字当作整数来排序
可以这样
def myCompare(a,b):
if( int(a.split('.')[1]) > int(b.split('.')[1]) ):
return 1
elif(int(a.split('.')[1]) < int(b.split('.')[1]) ):
return -1
else:
return 0
GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11']
GG.sort(cmp=myCompare)
就会得到你要的结果了
※ 引述《g9678007 (HKE)》之铭言:
: 抱歉,刚刚有点太慌乱。
: 小弟是要排序 例如 GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11']
: 我想要照数字大小排序
: 但是如果利用GG.sort() 会变
: ['NM_M_3.11', 'NM_M_3.13', 'NM_M_3.3']
: 他变成只排序小数点後面1然後由小到大
: 我想要的是
: [ 'NM_M_3.3','NM_M_3.11', 'NM_M_3.13']
: 问题是卡在字串里面前後都夹很多字串,我有想过直接把字理的
: 3.3 3.11 3.13 取出来在转float比大小就不会有这问题,但是每次的档名
: 都不是很规则不能单纯任位子
: 我在举个例像
: GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11','NM_M_3.9','NM_M_3.1']
: GG.sort()
: ['NM_M_3.1', 'NM_M_3.11', 'NM_M_3.13', 'NM_M_3.3', 'NM_M_3.9']
: 问题是我想要的是
: ['NM_M_3.1', 'NM_M_3.3', 'NM_M_3.9', 'NM_M_3.11', 'NM_M_3.13']
: 单纯用python语法可以做到嘛?
: ※ 引述《sbrhsieh (偶尔想摆烂一下)》之铭言:
: : 说真的,看不懂你的推文是什麽意思?
: : 如果文章内容有打错,不能花点时间修改一下你的文章内容吗?
: : 别人问你 [ 'NM_M_3.3','NM_M_3.11', 'NM_M_3.13'] 是依什麽顺序,你回答说依照
: : 数字大小排序,问题是这到底是什麽样的大小的顺序?
: : 我猜你要的是降幂:'NM_M_3.3','NM_M_3.13', 'NM_M_3.11'。
: : 可以在 sort 操作指定反序(for Python 2.4+):
: : GG.sort(reverse=True)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.213.158
1F:推 timerover:交给mantour大大讲解了! 经过解说才听懂原PO说什麽XD 11/16 22:16
2F:→ mantour:楼上的方法 刚刚还没看仔细就被删了XD 没学到>< 11/16 22:17
3F:→ mantour:可以再po一下吗 ~~ 11/16 22:17
4F:→ sbrhsieh:排序的方式与档名的规则没确定前,不可能给得出正确作法 11/16 22:20
5F:→ mantour:嗯 对呀 要知道输入的规则和确切想要排的方式 11/16 22:21
6F:→ mantour:反正给个例子 有其他需求就请原PO自己改罗 11/16 22:22
7F:推 g9678007:我是自己用硬干的方法自己写一个sort猜 11/16 22:38
8F:→ g9678007:原来这可以这样用,感谢大大指导了!! 11/16 22:38