【发布时间】:2011-07-09 22:34:36
【问题描述】:
我知道有几个这样命名的问题,但它们似乎对我不起作用。
我有一个列表,50 乘以 5 个元素。我想通过对每个元素应用自定义比较函数来对该列表进行排序。此函数计算元素排序所依据的列表的适应度。我创建了两个函数,比较和适应度:
def compare(item1, item2):
return (fitness(item1) < fitness(item2))
和
def fitness(item):
return item[0]+item[1]+item[2]+item[3]+item[4]
然后我尝试通过以下方式给他们打电话:
sorted(mylist, cmp=compare)
或
sorted(mylist, key=fitness)
或
sorted(mylist, cmp=compare, key=fitness)
或
sorted(mylist, cmp=lambda x,y: compare(x,y))
我还尝试了 list.sort() 使用相同的参数。但在任何情况下,函数都不会将列表作为参数,而是None。我不知道为什么会这样,主要来自 C++,这与我对回调函数的任何想法相矛盾。如何使用自定义函数对列表进行排序?
编辑 我发现了我的错误。在创建原始列表的链中,一个函数没有返回任何内容,但使用了返回值。抱歉打扰了
【问题讨论】:
-
显示代码,你期望什么,你得到什么。
-
请注意您的
compare函数不正确,因为它只返回True 或False,并且不区分item1和item2是否相等和item1大于@987654332 @。编写compare的正确方法是返回cmp(fitness(item1), fitness(item2))。但是使用key更好。 -
cmp关键字已在 Python 3 中删除。您现在可以在导入functools后使用key=functools.cmp_to_key(<function>)。
标签: python list sorting callback