當我調試我在Python 2.5得出如下古怪了些不合邏輯的水煤漿排序()函數調用:Python的排序()鍵功能的怪事
>>> aa = [10, 5, 20]
>>> sorted(range(len(aa)))
[0, 1, 2]
sorted(range(len(aa)), key=lambda a: aa[a])
[1, 0, 2]
sorted(range(len(aa)), key=lambda a: -aa[a])
[2, 0, 1]
前兩個電話按預期工作,但最後一個是imho只是錯了!它應該是:[1,2,0]。
後試圖來我來到這個問題的根源進一步的實驗(不使用拉姆達或者否定操作,不過它也同樣的問題):
>>> bb = [-10, -5, -20]
>>> sorted([0, 1, 2], key=bb.__getitem__)
[2, 0, 1]
即使事情像以下不工作,並表明雙重否定的作品:
>>> bb = [-10, -5, -20]
>>> def fun(i):
... return bb[i]
>>> sorted([0, 1, 2], key=fun)
[2, 0, 1]
>>> def fun2(i):
... return -bb[i]
>>> sorted([0, 1, 2], key=fun2)
[1, 0, 2]
我是失去了我的頭腦或問題在哪裏?或者爲什麼Python 3.x沒有用於正常工作的參數cmp?(兼容性是我沒有使用它的原因)?
爲什麼第三個結果是錯的?你排序的值是'[0,1,2]',鍵是'[-10,-5,-20]'。排序會導致'[-20,-10,-5]',這會給出值[[2,0,1]] ... – adw 2010-11-06 23:10:40
哎呀,你沒事!我不知道爲什麼我這樣做應該返回類似於: >>> bb = [-1,-1,-1] >>> j = 0 >>> for i in sorted(range( len(aa)),key = lambda a:-aa [a]): ... bb [i] = j ... j + = 1 >>> bb [1,2,0] – gw0 2010-11-06 23:32:15