ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

孟德尔自由组合定理--计算机模拟

2021-03-24 13:51:26  阅读:113  来源: 互联网

标签:count DNA -- 孟德尔 list 相对性状 自由组合 character


孟德尔(Gregor Johann Mendel)

阿基米德会思考如何用这粒豌豆做支点来翘起地球;英国人希望次日醒来能顺着它的茎爬上天空;而游戏玩家们则会把豌豆种在家门口阻挡一大波僵尸的进攻……

大约150多年前,有一名修道士却将它玩出了风格,玩出了水平,一不小心就奠定了现代生物学的三大基石之一。

8876634f8cfa8ea24a772d2b806a0575.jpg孟德尔(Gregor Johann Mendel)

他就是“现代遗传学之父”——格雷戈尔·约翰·孟德尔。


孟德尔在揭示了由一对遗传因子(或一对等位基因)控制的一对相对性状杂交的遗传规律——分离规律之后,这位才思敏捷的科学工作者,又接连进行了两对、三对甚至更多对相对性状杂交的遗传试验,进而又发现了第二条重要的遗传学规律,即自由组合规律,也有人称它为独立分配规律。这里我们仅介绍所进行的两对相对性状的杂交试验。(通过假说演绎法论证)

d86a4f040b144ce4a354f4c985998213.jpeg

1.杂交试验现象的观察

孟德尔在进行两对相对性状的杂交试验时,仍以豌豆为材料。他选取了具有两对相对性状差异的纯合体作为亲本进行杂交,一个亲本是结黄色圆形种子(简称黄色圆粒),另一亲本是结绿色皱形种子(简称绿色皱粒),无论是正交还是反交,所得到的F1全都是黄色圆形种子。由此可知,豌豆的黄色对绿色是显性,圆粒对皱粒是显性,所以F1的豌豆呈现黄色圆粒性状。

如果把F1的种子播下去,让它们的植株进行自花授粉(自交),则在F2中出现了明显的性状分离和自由组合现象。在共计得到的556粒F2种子中,有四种不同的表现类型.

如果以数量最少的绿色皱形种子32粒作为比例数1,那么F2的四种表现型的数字比例大约为9∶3∶3∶1。如图2-7所示豌豆种子两对相对性状的遗传实验。

从以上豌豆杂交试验结果看出,在F2所出现的四种类型中,有两种是亲本原有的性状组合,即黄色圆形种子和绿色皱形种子,还有两种不同于亲本类型的新组合,即黄色皱形种子和绿色圆形种子,其结果显示出不同相对性状之间的自由组合。

2.杂交试验结果的分析

孟德尔在杂交试验的分析研究中发现,如果单就其中的一对相对性状而言,那么,其杂交后代的显、隐性性状之比仍然符合3∶1的近似比值。

以上性状分离比的实际情况充分表明,这两对相对性状的遗传,分别是由两对遗传因子控制着,其传递方式依然符合于分离规律。

此外,它还表明了一对相对性状的分离与另一对相对性状的分离无关,二者在遗传上是彼此独立的。

如果把这两对相对性状联系在一起进行考虑,那么,这个F2表现型的分离比,应该是它们各自F2表现型分离比(3∶1)的乘积:这也表明,控制黄、绿和圆、皱两对相对性状的两对等位基因,既能彼此分离,又能自由组合。

3.自由组合现象的解释

那么,对上述遗传现象,又该如何解释呢?孟德尔根据上述杂交试验的结果,提出了不同对的遗传因子在形成配子中自由组合的理论。

因为最初选用的一个亲本——黄色圆形的豌豆是纯合子,其基因型为YYRR,在这里,Y代表黄色,R代表圆形,由于它们都是显性,故用大写字母表示。而选用的另一亲本——绿色皱形豌豆也是纯合子,其基因型为yyrr,这里y代表绿色,r代表皱形,由于它们都是隐性,所以用小写字母来表示。

由于这两个亲本都是纯合体,所以它们都只能产生一种类型的配子,即:

YYRR——YR

yyrr——yr

二者杂交,YR配子与yr配子结合,所得后代F1的基因型全为YyRr,即全为杂合体。由于基因间的显隐性关系,所以F1的表现型全为黄色圆形种子。杂合的F1在形成配子时,根据分离规律,即Y与y分离,R与r分离,然后每对基因中的一个成员各自进入到下一个配子中,这样,在分离了的各对基因成员之间,便会出现随机的自由组合,即:

(1) Y与R组合成YR;

(2)Y与r组合成Yr;(3)y与R组合成yR;

(4)y与r组合成yr。

由于它们彼此间相互组合的机会均等,因此杂种F1(YyRr)能够产生四种不同类型、相等数量的配子。当杂种F1自交时,这四种不同类型的雌雄配子随机结合,便在F2中产生16种组合中的9种基因型合子。由于显隐性基因的存在,这9种基因型只能有四种表现型,即:黄色圆形、黄色皱形、绿色圆形、绿色皱形。如图2-8所示它们之间的比例为9∶3∶3∶1。

这就是孟德尔当时提出的遗传因子自由组合假说,这个假说圆满地解释了他观察到的试验结果。事实上,这也是一个普遍存在的最基本的遗传定律,这就是孟德尔发现的第二个遗传定律——自由组合规律,也有人称它为独立分配规律。

4.自由组合规律的验证

与分离规律相类似,要将自由组合规律由假说上升为真理,同样也需要科学试验的验证。孟德尔为了证实具有两对相对性状的F1杂种,确实产生了四种数目相等的不同配子,他同样采用了测交法来验证。

把F1杂种与双隐性亲本进行杂交,由于双隐性亲本只能产生一种含有两个隐性基因的配子(yr),所以测交所产生的后代,不仅能表现出杂种配子的类型,而且还能反映出各种类型配子的比数。换句话说,当F1杂种与双隐性亲本测交后,如能产生四种不同类型的后代,而且比数相等,那么,就证实了F1杂种在形成配子时,其基因就是按照自由组合的规律彼此结合的。为此,孟德尔做了以下测交试验,如图2-9所示。

实际测交的结果,无论是正交还是反交,都得到了四种数目相近的不同类型的后代,其比数为1∶1∶1∶1,与预期的结果完全符合。这就证实了雌雄杂种F1在形成配子时,确实产生了四种数目相等的配子,从而验证了自由组合规律的正确性。

5.自由组合规律的实质

根据前面所讲的可以知道,具有两对(或更多对)相对性状的亲本进行杂交,在F1产生配子时,在等位基因分离的同时,非同源染色体上的非等位基因表现为自由组合,这就是自由组合规律的实质。也就是说,一对等位基因与另一对等位基因的分离与组合互不干扰,各自独立地分配到配子中。

我因好奇,用python代码模拟孟德尔自由组合定理

85627640729e0cb09a00d7dfc170af9c.jpg6306955816bd02f12ae451b4da504ab7.jpg4f978e6b00083369abcbe979c282ec79.jpg

#原创公众号pythonEducation
#孟德尔自由组合定理

import copy

#大写字母表示显性基因,小写字母表示隐性基因
#gene,如D或d
#基因型genotype
genotype11=['Y','Y']
genotype12=['y','y']
genotype13=['Y','y']
genotype21=['R','R']
genotype22=['r','r']
genotype23=['R','r']
DNA1=[genotype13,genotype23]
DNA2=[genotype12,genotype22]
DNA3=[genotype11,genotype21]
DNA4=[genotype12,genotype22]
DNA_group=[DNA3,DNA4]

#基因表现型character
#字母大小写判断a.islower(),a.isupper()
def Character(genotype1):
for i in genotype1:
if i.isupper()==True:
return "Dominant"

return "recessive"


#Phenotype输入基因型,返回它的代表基因
def Phenotype(genotype1):
for i in genotype1:
if i.isupper()==True:
return i

return genotype1[0]


#配子后,基因型genotype的可能数量
def Assort(genotype1,genotype2):
genotype_list=[]

for gene1 in genotype1:
for gene2 in genotype2:
genotype=[gene1,gene2]
genotype_list.append(genotype)

return genotype_list


#返回不重复列表
def None_repeat_list(list1):
none_repeat_list=[]
for i in list1:
#print 'i:',i
if i not in none_repeat_list:
none_repeat_list.append(i)
return none_repeat_list



#计算各个基因类型比例
def Count_list(none_repeat_list,DNA_sort_list,n):
count_list=[]
for i in none_repeat_list:
count=DNA_sort_list.count(i)
count=count*1.0/n
count_list.append(count)

return count_list

#返回各个基因类型比例
def Ratio_genotype(none_repeat_list,count_list):
ratio_genotype=zip(none_repeat_list,count_list)
return ratio_genotype


#多个基因型的自由组合
def Independent_assort(DNA1,DNA2):
genotype00=DNA1[0]
genotype01=DNA2[0]
assortment1=Assort(genotype00,genotype01)

genotype10=DNA1[1]
genotype11=DNA2[1]
assortment2=Assort(genotype10,genotype11)

result=Assort(assortment1,assortment2)

return result

#排序函数,大写字母(线性基因)在前面.例如[r,R]排序后变成[R,r]
def Sort(list1):
k=0
n=len(list1[0])
#print "n:",n
for i in range(len(list1)):
#print 'i',i
while k<n:
#print 'k',k
#print 'list1[i][k]',list1[i][k]
list1[i][k].sort()
k+=1
k=0
return list1

#DNA所有性状结果
'''>>> Character_DNA(DNA_noneRepeat_assortment)
[['Y', 'R'], ['Y', 'R'], ['Y', 'r'], ['Y', 'R'], ['Y', 'R'], ['Y', 'r'], ['y', 'R'], ['y', 'R'], ['y', 'r']]'''


def Character_DNA(DNA_noneRepeat_assortment):
character_DNA=copy.deepcopy(DNA_noneRepeat_assortment)
k=0
noneRepeat_num=len(DNA_noneRepeat_assortment)
element_num=len(DNA_noneRepeat_assortment[0])
#print "n:",n
for i in range(noneRepeat_num):
#print 'i',i
while k<element_num:
#print 'k',k
#print 'list1[i][k]',list1[i][k]
character_DNA[i][k]=Phenotype(character_DNA[i][k])
k+=1
k=0
return character_DNA


#最终性状和对应数量比
def NoneRepeat_character_ratio(ratio_character,noneRepeat_character_DNA):
num=len(ratio_character)
list1=copy.deepcopy(ratio_character)
list_num=[]
count=0
for i in noneRepeat_character_DNA:
for k in list1:
if k[0]==i:
count+=k[1]
#print "count",count
list_num.append(count)
count=0
return list_num



def Analysis(DNA_group,ratio_character_result):
print "DNA_group:",DNA_group
print 'ratio_character_result:',ratio_character_result

#多个基因型的自由组合结果(有重复)
DNA_assortment=Independent_assort(DNA3,DNA4)

#多基因自由组合后的排序,大写字母(线性基因)在前面.例如[r,R]排序后变成[R,r]
DNA_sort=Sort(DNA_assortment)
#自由组合个数
n=len(DNA_sort)


#多个基因型的自由组合结果(无重复)
DNA_noneRepeat_assortment=None_repeat_list(DNA_sort)
#排序结果数量统计
count_list=Count_list(DNA_noneRepeat_assortment,DNA_sort,n)
#排序后基因类型对应的数量统计
ratio_genotype=Ratio_genotype(DNA_noneRepeat_assortment,count_list)

#DNA性状结果(重复)
character_DNA=Character_DNA(DNA_noneRepeat_assortment)
#数量统计
ratio_character=Ratio_genotype(character_DNA,count_list)

#DNA性状结果(去重复)
noneRepeat_character_DNA=None_repeat_list(character_DNA)

#DNA性状和数量比(不重复)
count_noneRepeat_character=NoneRepeat_character_ratio(ratio_character,noneRepeat_character_DNA)

#DNA性状和数量比,最后整合
ratio_character_result=Ratio_genotype(noneRepeat_character_DNA,count_noneRepeat_character)

#分析结果
Analysis(DNA_group,ratio_character_result)

欢迎各位同学学习
python机器学习生物信息学,博主录制,2k超清
https://edu.51cto.com/sd/3a516
python机器学习生物信息学-模型诊断分析

标签:count,DNA,--,孟德尔,list,相对性状,自由组合,character
来源: https://blog.51cto.com/15002417/2670481

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有