3

所以我需要编写一个程序,生成具有单个基因的理论有机体的几代随机等位基因。

我从一个包含一个突变等位基因 2 的列表开始,然后我为下一代选择 3 个等位基因,并将它们附加到下一代的列表中

import random

p = [1,1,1,2]

from random import choice
n=len(p)-1

for i an range(n):
    p.append(choice(p))

问题是,这不会删除未选择的等位基因。我怎样才能调整这个程序,以便从列表中删除未选择的等位基因?

谢谢

- 编辑

程序的输出看起来像这样

[1,1,1,2,1,2,1]

这将代表具有 2 个不同等位基因的 7 个生物群体。这代表了第 2 代,因为有 3 个选定等位基因的双等位基因。这模拟了 3 个选定等位基因的 2 个后代。但未选择的等位基因(在本例中为 1)不应出现在这一代中。所以我想知道的是如何从这里的列表中删除它

注意。抱歉有点冗长

4

2 回答 2

1
import random 
n = 4 

A = [i for i in xrange(n)]
B = [1,1,1,2]
NextGeneration = [] 
for i in xrange(n-1):
    last = n - i - 1
    actualChoice =  random.randint(0,last)   
    NextGeneration.append(B[A[actualChoice]])  
    auxSwap = actualChoice 
    A[actualChoice] = A[last] 
于 2012-10-07T12:55:27.117 回答
1

我不确定我是否完全理解你的问题,但这里是一个解决方案的尝试:

first_gen = [1,1,1,2]
second_gen = first_gen + random.sample(first_gen, len(first_gen)-1)

这些帮助有用?

于 2012-10-07T13:03:49.723 回答