我正在研究遗传算法问题。假设我有一个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方法可以根据他们的分数对这些人进行排序?谢谢!
答案 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)