我写了一个函数来计算某些字符(的出现次数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]}
Run Code Online (Sandbox Code Playgroud)
我想将下面的代码转换为列表理解以优化速度.它使用两个嵌套的for循环,输入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
Run Code Online (Sandbox Code Playgroud)
我已经尝试替换函数底部的嵌套for循环以获得此列表理解:
count = [ [ count[Motifs[i][j]][j] += 1 ] for i in range(0, …Run Code Online (Sandbox Code Playgroud) 我一直在努力将输入文件转换为我的算法的正确格式.
我想阅读这个文本文件:
1 -> 7,8
11 -> 1,19
219 -> 1,9,8
Run Code Online (Sandbox Code Playgroud)
进入这本词典:
{ 1: [7, 8], 11: [1, 19], 219: [1, 9, 8]}
Run Code Online (Sandbox Code Playgroud)
我试过这段代码:
with open("file.txt", "r+") as f:
f.write(f.read().replace("->", " "))
f.close()
d = {}
with open("file.txt") as file:
for line in file:
(key, val) = line.split()
d[key] = val
Run Code Online (Sandbox Code Playgroud)
但是使用这个代码,它会被第二列中有超过2个参数的事实所困扰.如何从第二列中的元素中创建列表并使用该列表作为每个键的值?