python - 使用自定义比较功能对列表列表进行排序

标签 python list sorting callback

我知道有几个这样命名的问题,但它们似乎对我不起作用。

我有一个列表,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++,这与我对回调函数的任何想法相矛盾。如何使用自定义函数对列表进行排序?

编辑 我发现了我的错误。在创建原始列表的链中,一个函数没有返回任何内容,但使用了返回值。抱歉打扰了

最佳答案

另外,您的比较功能不正确。它需要返回 -1、0 或 1,而不是你所拥有的 bool 值。正确的比较函数是:

def compare(item1, item2):
    if fitness(item1) < fitness(item2):
        return -1
    elif fitness(item1) > fitness(item2):
        return 1
    else:
        return 0

# Calling
list.sort(key=compare)

关于python - 使用自定义比较功能对列表列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213033/

相关文章:

r - 根据特定行中的值对列进行重新排序。

python - 单独文件中的 FastAPI/Pydantic 循环引用

python - 在 Pandas 中选择两个 DataFrame 之间的唯一行

python - 鼠标悬停在数据上时如何显示数据标签

python-3.x - 如何从两个不同的列表中删除重复项?

python - python中的CSV文件处理

sorting - COBOL 排序事务文件

sorting - 在java中存储递归方法的增量

python - MacPorts 安装后,Python 中的 OpenCV 模块失败(退出代码 139)

javascript - 在javascript中展平数组以获得最长的字符串