2013-03-01 77 views
1

我正在研究遺傳算法問題。假設我有一個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

當然,使用key參數爲.sort()方法:

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

使用operator.attrgetter()使這是一個更容易一些,但不是必需的。

請參閱Python wiki上的Sorting Howto以獲取更多提示和技巧。

+0

......華麗! – Rock 2013-03-01 22:13:25

+0

應該得到'分數',而不是'rr',但是很好的答案。 – mVChr 2013-03-01 22:20:02

+0

@mVChr:確實,已更正。謝謝。使用cmp函數的 – 2013-03-01 22:24:20

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

做了更多的工作,並且該選項已從Python 3中移除(儘管存在[解決方法](http://docs.python.org/3/library/functools.html#functools.cmp_to_key)) 。 – 2013-03-01 22:16:22

+0

@MartijnPieters很高興知道,謝謝。 – mVChr 2013-03-01 22:18:53

0

沒有導入任何庫:

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