python 列表比较不同_使用Python中的自定义比较功能对列表进行排序
由于OP要求使用自定義比較功能(這也是導致我提出這個問題的原因),因此我想在這里給出可靠的答案:
通常,您要使用內置的return fitness(item2) - fitness(item1)函數,該函數將自定義比較器作為其參數。 我們需要注意以下事實:在Python 3中,參數名稱和語義已更改。
自定義比較器的工作方式
提供自定義比較器時,通常應返回遵循以下模式的整數/浮點值(與大多數其他編程語言和框架一樣):
當左項目應排在右項目之前時,返回負值(return fitness(item2) - fitness(item1))
當左項目應排在右項目后時,返回正值(return fitness(item2) - fitness(item1))
當左邊和右邊的項目都具有相同的權重并且應該“相等地”排序而沒有優先權時,返回return fitness(item2) - fitness(item1)
在OP的特定情況下,可以使用以下自定義比較功能:
def compare(item1, item2):
return fitness(item1) - fitness(item2)
使用減號運算是一個不錯的技巧,因為當左項的重量(此處為:return fitness(item2) - fitness(item1))大于右項的重量(此處為:item2)時,它會產生正值。 因此,item1將在item2之后排序。
如果要反轉排序順序,只需反轉減法:return fitness(item2) - fitness(item1)
在Python 2中調用sorted()
sorted(mylist, key=cmp(compare))
要么:
sorted(mylist, cmp=lambda item1, item2: fitness(item1) - fitness(item2))
在Python 3中調用sorted()
from functools import cmp_to_key
sorted(mylist, key=cmp_to_key(compare))
要么:
from functools import cmp_to_key
sorted(mylist, key=cmp_to_key(lambda item1, item2: fitness(item1) - fitness(item2)))
總結
以上是生活随笔為你收集整理的python 列表比较不同_使用Python中的自定义比较功能对列表进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode笔记】215. 数组中
- 下一篇: python怎么让输出结果为01_pyt