title: Fitness proportionate selection (roulette wheel selection) in Python
body: <p>I have a list of objects (Chromosome) which have an attribute fitness (chromosome.fitness is between 0 and 1)</p>
  <p>Given a list of such objects, how can I implement a function which returns a single chromosome whose chance of being selected is proportional to its fitness? That is, a chromosome with fitness 0.8 is twice as likely to be selected as one with fitness 0.4.</p>
  <p>I've found a few Python and pseudocode implementations, but they are too complex for this requirement: the function needs only a list of chromosomes. Chromosomes store their own fitness as an internal variable.</p>
  <p>The implementation I already wrote was before I decided to allow chromosomes to store their own fitness, so was a lot more complicated and involved zipping lists and things.</p>
  <h2>----------------------------EDIT----------------------------</h2>
  <p>Thanks Lattyware. The following function seems to work.</p>
  <pre><code>def selectOne(self, population):
      max     = sum([c.fitness for c in population])
      pick    = random.uniform(0, max)
      current = 0
      for chromosome in population:
          current += chromosome.fitness
          if current &gt; pick:
              return chromosome
  </code></pre>