前提・実現したいこと
ni = collections.Counter(result)
をprint(ni)で出力すると、
Counter({'A': 4})
Counter({'A': 4, 'C': 3, 'D': 1})
Counter({'A': 4, 'C': 3, 'D': 3, 'E': 2})
Counter({'A': 5, 'C': 4, 'D': 4, 'E': 3})
となってしまうのですが
Counter({'A': 4}) (1列目がAが4つあるのでこうなります)
Counter({'C': 3, 'D': 1}) (2列目はCが3つ、Dが1つあるのでこうなります)
Counter({'D': 2, 'E': 2}) (3列目はDが2つ、Eが2つあるのでこうなります)
Counter({'A': 1, 'C': 1, 'D': 1, 'E': 1}) (4列目はAが1つ、Cが1つ、Dが1つ、Eが1つあるのでこうなります)
のように出力したいです。
ちなみに、fasの中身は
P0
ACDE
Q2
ACDD
P4
ACEC
Q
ADEA
です。
該当のソースコード
python
1import math 2import collections 3 4f = open('fas','r') 5 6seq = "" 7result = "" 8q = [] 9shannon = [] 10 11for line in f: 12 if '>' in line: 13 if seq == "": 14 continue 15 p = list(seq.replace("\n","")) 16 q.append(p) 17 seq = "" 18 else: 19 seq += line 20 21q.append(list(seq.replace("\n",""))) 22 23num = len(q) 24 25e = 0 26i = 0 27 28for e in range(len(q[0:4])): 29 for i in range(len(q)): 30 result += q[i][e] 31 i += 1 32 e += 1 33 34 ni = collections.Counter(result) 35 print(ni) 36 37 for j in ["A","C","D","E","F","G","H","I","K","L","M","N","P","Q","R","S","T","V","W","Y","-"]: 38 pi = ni[j]/num 39 if pi > 0: 40 shannon.append(float(pi*math.log(pi,2))) 41 print(-sum(shannon))
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/12/21 22:53