作者mantour (朱子)
看板Python
标题Re: [教学] 排序问题
时间Tue Nov 17 02:45:26 2009
1F:推 zerodevil:就这个例子来说给key会比较简单xd11/16 22:09
看了z大的推文去查了一下用法
key这个引数是用来指定一个函数f,
将list的元素i用f(i)的大小来排序
GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11']
以这个例子来说,我要比的是 int(i.split('.')[1]) 的大小
因此 key = lambda x: int(x.split('.')[1])
只要用
GG.sort(key = lambda x: int(x.split('.')[1]))
就可以得到结果
假如不喜欢用lambda的话,另外定义函式也是可以的
def f(x):
return int(x.split('.')[1])
GG.sort(key=f)
也会得到一样的结果
※ 引述《mantour (朱子)》之铭言:
: 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语法可以做到嘛?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.213.158
2F:推 g9678007:wow thx 受教了 11/17 08:51