我正在用Python编写排序算法。
例如,
假设我有1个父母生成的10个孩子。 每个孩子都有两个属性" Fitness"和"噪音"。
让我们说,我计算"健身"首先为10个孩子选择并选择3个最好的孩子(更高"健身"被选为最佳孩子)。例如,让我们将60,50,40作为3个最佳孩子的健身值。
现在我继续计算"噪音"这3个孩子中。再举个例子,让我们假设我得到了#34;噪音" 3个孩子为5,8,6。 (较少"噪音"被认为更好)。
如何找到基于最佳"健身"选择的排序算法?和"噪音"。理想情况下,我需要一个健康状况良好的孩子。低噪音"。我需要以一种方式对它们进行排序,以便从3个孩子中选出最好的孩子。
Initial 3 children:
Fitness {60,50,40} Noise {5,8,6}
排序后我理想的3个孩子应该是:
Fitness {60,40,50} Noise {5,6,8}
我也不确定如何选择噪音作为次要变量。
基本上我在python中寻找一个好的排序算法。
答案 0 :(得分:4)
>>> 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返回用于比较的对象。如果我们返回一个元组,它将根据元组的第一个元素,然后是第二个元素等进行排序。
如果我们首先使元组成为噪音,那么适应性为负,它会给出你想要的顺序:
>>> sorted(children, key=lambda child: (child.noise, -child.fitness))
[Child(fitness=60, noise=5),
Child(fitness=40, noise=6),
Child(fitness=50, noise=8)]
答案 1 :(得分:1)
假设你有一个元组列表,其中每个元组代表两个属性的适应度和噪音 - [(10,5),(90,7),(100,12) ...]
,你可以使用下面的代码 -
>>> 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