/ / Створення всіх можливих комбінацій з подібними ступенями свободи - пітон, регулярні вирази, комбінації, біоінформатика, itertools

Створення всіх можливих комбінацій з однаковими ступенями свободи - python, regex, combinations, bioinformatics, ittertools

Я намагаюся зробити код у python, який, заданий aРегулярний вираз з даного алфавіту придумає всі можливі альтернативи з подібними ступенями свободи. Наприклад, якщо моїм алфавітом є ACTG (ДНК нуклеотиди), і моїм регулярним виразом є [AG] CG (регулярний вираз, що охоплює ACG або GCG), я хотів би вивести [AC] CG (регулярний вираз, що охоплює ACG або CCG) ), [AT] CG (регулярний вираз, що охоплює ACG або TCG), [AG] CC і т.д.

Проблема в тому, що я дуже новачка в python або програмуваннівзагалі і до цих пір не придумали способу зробити це. Кінцева мета полягає в тому, щоб знайти, чи існує певне ухил у бік виродженої послідовності (регулярний вираз) в даній рядку (транскрипті ДНК), бачачи, чи є середня поява всіх інших подібних послідовностей дегенрату дійсно меншою, ніж кількість виникнення цієї конкретної виродженої послідовності.

Дякуємо за будь-яку допомогу або підказку,

Eyal

Відповіді:

0 для відповіді № 1

Дякуємо за коментарі, мені вдалося зробити це вручну для конкретного RegEx на даний момент (поки я не поліпшу мої навички python), використовуючи цей код (для RegEx [AGT] [AG] AC [ACT]):

import itertools


def create_pots():
af = []
bf = []
cf = []
df = []
ef = []
gf = []
a = list(itertools.combinations("AGCT", 3))
b = list(itertools.combinations("AGCT", 2))
c = list(itertools.combinations("AGCT", 1))
d = list(itertools.combinations("AGCT", 1))
e = list(itertools.combinations("AGCT", 3))
for i in range(len(a)):
af.append("["+ "".join(a[(i-1)]) + "]")
for i in range(len(b)):
bf.append("["+"".join(b[(i-1)])+"]")
for i in range(len(c)):
cf.append("".join(c[(i-1)]))
for i in range(len(d)):
df.append("".join(d[(i-1)]))
for i in range(len(e)):
ef.append("["+"".join(e[(i-1)])+"]")
g = list(itertools.product(af, bf, cf, df, ef))
for i in range(len(g)):
gf.append("".join(g[(i-1)]))
gf.remove("[AGT][AG]AC[ACT]")
return gf

Це повертає список всіх можливих RegExs, подібних до моїх, наприклад:

gf = ["[ACT][GT]CC[ACT]", "[GCT][CT]TT[GCT]", "[GCT][CT]TT[AGC]", "[GCT][CT]TT[AGT]", "[GCT][CT]TT[ACT]", "[GCT][CT]TA[GCT]", "[GCT][CT]TA[AGC]", "[GCT][CT]TA[AGT]", "[GCT][CT]TA[ACT]", "[GCT][CT]TG[GCT]", "[GCT][CT]TG[AGC]", "[GCT][CT]TG[AGT]"....]