Я намагаюся зробити код у 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]"....]