Я написал функцию для подсчета вхождения некоторых символов (A
, C
, G
и T
) в нескольких строках в одной и той же позиции и сохранения числа вхождений в словаре.
Например, с этими двумя строками "ACGG" и "CAGT", он должен возвращать:
{'A': [1, 1, 0, 0], 'C': [1, 1, 0, 0], 'G': [0, 0, 2, 1], 'T': [0, 0, 0, 1]}
Я хочу преобразовать приведенный ниже код в список, чтобы оптимизировать его для скорости. Он использует два вложенных цикла, а входные Motifs - список строк, содержащих A C G и T.
def CountWithPseudocounts(Motifs):
count = {}
k = len(Motifs[0])
t = len(Motifs)
for s in 'ACGT':
count[s] = [0] * k
for i in range(t):
for j in range(k):
symbol = Motifs[i][j]
count[symbol][j] += 1
return count
Я попытался заменить вложенные для циклов внизу функции для этого понимания списка:
count = [ [ count[Motifs[i][j]][j] += 1 ] for i in range(0, t) ] for j in range(0, k)]
Это не работает, возможно потому, что мне не разрешено присваивать значение + = 1 в понимании списка. Как я могу обойти это?