作者KSJ (阿真)
看板Python
标题Re: [问题] 关於list排序
时间Fri Nov 20 05:38:18 2009
也参考过回文的文章 跟参考文章
对於以下的解释还是不解(虽然会使用了)
想请板友们帮个忙:
"
key 的使用方式比前面 cmp 的方式来的直觉,而且速度较快,
因为排序的时候,只要需要比较的动作就会呼叫 cmp,
而 key 只会被呼叫 n 次,n 是序列的长度,所以 key 的速度较快。
"
我的想法是
比方有三个数 [小 ,大 ,中]
cmp感觉是 先抓 小 大 二个比 把小放在第一位
再抓 大 中 二个比
再抓 小 中 二个比 把中放在第二位
把大放在第三位
二个疑问:
1. 对於key的比法(还是说 应该称作 "准则") 是类似cmp这样吗?怎麽比的呢?
2. 又对於最原本的sort()方法 是用最佳化的比法 还是最简单的比法呢??
※ 引述《cakewalks (大雪崩)》之铭言:
: ※ 引述《dotwsc (海上生明月)》之铭言:
: : 不知道这是不是你要的?
: : [[1, 3, 5], [6, 4, 2], [9, 4, 3]]
: : [[6, 4, 2], [9, 4, 3], [1, 3, 5]]
: 用 cmp 比较慢,而且 cmp 已经被 Python 3.0 淘汰了。
: 如果要依第二个元素大小排序的话
: def my_key(item):
: return item[1]
: p.sort(key=my_key)
: 如果要依第二个第三个第一个元素大小排序的话
: def my_key(item):
: return (item[1], item[2], item[0])
: p.sort(key=my_key)
: 如果不想定义函式,可用 lambda 或是
: from operator import itemgetter
: p.sort(key=itemgetter(1,2,0))
: 更详细的内容可以参见拙着
: http://descriptor.blogspot.com/2008/12/python-idiom-sort.html
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.63.180