У меня есть список списков:
x = [[AATG, ATAT, GGCC],
[CCTA, TCGT, AAAA],
[TTAA, GGAT, TACA]]
Символ в списках является комбинацией только ATCG, и каждый элемент в списке имеет длину четыре символа. Внутренний список имеет одинаковую длину.
Я хочу оценить частоту элементов, которая имеет только все комбинации A и T; например, ATAT (первый столбец второго ряда), AAAA (третий столбец второго ряда) и TTAA (первый столбец третьего ряда) в каждом столбце.
Для вызова всех комбинаций A и T я использовал регулярное выражение:
pattern = re.findall('[AT]{4}', key)
Для чтения списка списков
y = []
for i in range(len(x[0])):
per.append(len([j[i] for j in x if j[i]==pattern])/len(x))
print(y)
Этот код работает, если я использую определенную строку, например 'ATAT':
y = []
for i in range(len(x[0])):
per.append(len([j[i] for j in x if j[i]=='ATAT'])/len(x))
print(y)
но это не работает для паттернов с regrex. Это может быть все, что может вызвать re.findall, например:
'[CG]{4}' for all element has C or G
'^(?=[GC]*[AT][GC]*$).{4}$' for 75% of element has G or C
Ожидаемый результат:
[0.34, 0.34, 0.34]