首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中基于两个变量的排序

python中基于两个变量的排序
EN

Stack Overflow用户
提问于 2015-06-18 13:30:49
回答 2查看 2K关注 0票数 1

我正在用Python编写排序算法。

例如,

让我说,我有10个孩子,从一个父母。每个孩子都有“健康”和“噪音”两个属性。

比如说,我先计算出10个孩子的“健康度”,然后只选择3个最好的孩子(较高的“健康度”被选为最佳)。例如,让我们以60,50,40作为三个最好的孩子的健身值。

现在我开始计算这三个孩子的“噪音”。同样的,让我们假设我得到了3个孩子的“噪音”作为5,8,6。(较少的“噪音”被认为更好)。

如何找到一种基于最佳“适应度”和“噪声”的排序算法。理想情况下,我需要一个高“健康”和“低噪音”的孩子。我需要从三个孩子中挑选出最好的孩子。

代码语言:javascript
运行
复制
Initial 3 children:

Fitness {60,50,40} Noise {5,8,6}

我理想的三个孩子排序后应该是:

代码语言:javascript
运行
复制
Fitness {60,40,50} Noise {5,6,8}

我也不知道如何给出选择噪声作为次要变量的权重。

基本上,我在python中寻找一个很好的排序算法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-18 13:36:08

代码语言:javascript
运行
复制
>>> from collections import namedtuple

>>> Child = namedtuple('Child', 'fitness noise')

>>> children = [Child(fitness=60, noise=5),
...             Child(fitness=50, noise=8),
...             Child(fitness=40, noise=6)]

您可以使用内置的sorted函数,并传递一个lambda作为键。lambda返回用于比较的对象。如果我们返回一个元组,它将根据元组的第一个元素进行排序,然后是第二个元素,等等。

如果我们让元组首先是噪音,然后是适应度的负值,它会给出你想要的顺序:

代码语言:javascript
运行
复制
>>> sorted(children, key=lambda child: (child.noise, -child.fitness))
[Child(fitness=60, noise=5),
 Child(fitness=40, noise=6),
 Child(fitness=50, noise=8)]
票数 4
EN

Stack Overflow用户

发布于 2015-06-18 13:39:52

假设您有一个元组列表,其中每个元组表示适合性和噪声- [(10,5),(90,7),(100,12) ...]这两个属性,您可以使用以下代码-

代码语言:javascript
运行
复制
>>> l = [(100,5),(89,13),(102,65),(10,3),(109,45)]
>>> l.sort(key = lambda x:x[0], reverse = True) ## Sorting(descending) on the basis of fitness
>>> l_ = l[:3]                                  ## Extract the top 3 tuples
>>> l_.sort(key = lambda x:x[1])                ## Sorting on the basis of noise
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30916782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档