Быстрая мысль относительно.split()

Поэтому мне нужно сделать квадрат Punnett с помощью Python. Квадрат Пуннетта - это простой метод определения видимых, а иногда и невидимых признаков. Мой код до сих пор берет генетический состав двух родителей и находит все различные комбинации A и G. Единственная проблема, с которой я столкнулся на данный момент, заключается в том, что при печати буквы располагаются не в правильном порядке. Например: для каждого "детского" возможного генетического состава есть две буквы "А" (прописные или строчные) и две буквы "Г" (также прописные или строчные). Я провел большое количество исследований, и единственный другой вопрос / ответ по SOF, который был в некоторой степени связан с моим, был неясен и не работал. Мой код выглядит следующим образом.

import itertools
import string

#genepool_1 refers to parent 1's alleles
#genepool_2 refers to parent 2's alleles
#outerlayerf1 refers to both parent genetic contributions to the first generation of offspring
#f1 refers to the punnett square of the first generation of offspring

#parent 1
genepool_1 = ['Aa','Gg']
parent_1 = sorted(list(itertools.product(*genepool_1)))

#parent 2
genepool_2 = ['aa','GG']
parent_2 = sorted(list(itertools.product(*genepool_2)))


#F1 or Parent 1/2 Offspring
outerlayerf1 = [parent_1,parent_2]
f1___________ = list(itertools.product(*outerlayerf1))
f1__________ = str(f1___________)
f1_________ = f1__________.replace('[','')
f1________ = f1_________.replace(']','')
f1_______ = f1________.replace("'",'')
f1______ = f1_______.replace(' ','')
f1_____ = f1______.replace(')),((', ') (')
f1____ = f1_____.replace('((', '(')
f1___ = f1____.replace('))',')')
f1__ = f1___.replace('),(','')
f1_ = f1__.replace(',','')
print f1_

И это распечатывает

(AGaG) (AGaG) (AGaG) (AGaG) (AgaG) (AgaG) (AgaG) (AgaG) (aGaG) (aGaG) (aGaG) (aGaG) (agaG) (agaG) (agaG) (agaG)

Когда это должно напечатать

(AaGG) (AaGG) (AaGG) (AaGG) (AagG) (AagG) (AagG) (AagG) (aaGG) (aaGG) (aaGG) (aaGG) (aagG) (aagG) (aagG) (aagG)

(Я знаю, что каждый вариант печатается 4 раза. Так должно быть, чтобы иметь наиболее точные вероятности)

Большое спасибо,

Eli

2 ответа

Решение

Я ужасно смущен всем, что связано с этим вопросом, но я думаю, что заставил его работать с этим, так что, по крайней мере, я надеюсь, что это поможет:

f1 = [
     thingies[0][0] + thingies[1][0] + thingies[0][1] + thingies[1][1]
     for thingies in zip(parent_1, parent_2)
] * 4
print(f1)

Еще один способ получить его с помощью zip() функция и str.jon() -

>>> genepool_1 = ['Aa','Gg']
>>> parent_1 = sorted(list(itertools.product(*genepool_1)))
>>>
>>> #parent 2
... genepool_2 = ['aa','GG']
>>> parent_2 = sorted(list(itertools.product(*genepool_2)))
>>>
>>>
>>> #F1 or Parent 1/2 Offspring
... outerlayerf1 = [parent_1,parent_2]
>>> f1 = list(itertools.product(*outerlayerf1))
>>> f2 = [''.join(''.join(i) for i in list(zip(*x))) for x in f1]
['AaGG', 'AaGG', 'AaGG', 'AaGG', 'AagG', 'AagG', 'AagG', 'AagG', 'aaGG', 'aaGG', 'aaGG', 'aaGG', 'aagG', 'aagG', 'aagG', 'aagG']
Другие вопросы по тегам