在课堂上按成员的属性排序

时间:2013-03-01 22:08:35

标签: python genetic-algorithm

我正在研究遗传算法问题。假设我有一个Population()类,其列表为Individual()。每个人都有与之相关的分数。根据人口中的得分对这些人进行排序/排名的好方法是什么?举个例子:

class Individual(object):
    rr = 100
    def __init__(self):
        self.score = random.randrange(self.rr)

class Population(object):
    def __init__(self, size):
        self.size = size
        self.population = [Individual() for _ in xrange(self.size)]

pop = Population(5)
for i in xrange(pop.size):
    print pop.population[i].score

是否有一种Pythonic方法可以根据他们的分数对这些人进行排序?谢谢!

3 个答案:

答案 0 :(得分:3)

当然,使用key方法的.sort()参数:

from operator import attrgetter
pop.population.sort(key=attrgetter('score'))

使用operator.attrgetter()可以使这更容易,但不是必需的。

有关更多提示和技巧,请参阅Python wiki上的Sorting Howto

答案 1 :(得分:1)

sorted_pop = sorted(pop.population, lambda x, y: cmp(x.score, y.score))

答案 2 :(得分:0)

不导入任何库:

pop.population.sort(key=lambda x: x.score)