我有一个列表列表。
[[A, B, C],[C, B, A],[B, B, B],[C, C, A],[B, C, A]]
我想计算内部列表每个位置的频率“ A”。
预期输出:
0.2, 0 , 0.6
内部列表的长度相等。
lst = []
with open("Control_nucleosome.fasta", "r", newline='\n') as report:
for line in report:
lst.append(line)
for x in lst:
if x[[0]]
我不知道如何在第二个for循环中进行处理。
答案 0 :(得分:4)
[inner.count('A')/len(inner) for inner in zip(*lst)]
答案 1 :(得分:1)
您需要:
x = [['A', 'B', 'C'],['C', 'B', 'A'],['B', 'B', 'B'],['C', 'C', 'A'],['B', 'C', 'A']]
per = []
for i in range(len(x[0])):
per.append(len([j[i] for j in x if j[i]=='A'])/len(x))
print(per)
输出:
[0.2, 0.0, 0.6]
答案 2 :(得分:1)
您可以循环浏览原始列表,然后循环浏览内部循环以找到答案,例如:
x = [['A', 'B', 'C'],['C', 'B', 'A'],['B', 'B', 'B'],['C', 'C', 'A'],['B', 'C', 'A']]
answer = [0,0,0]
for ele in x:
for idx,j in enumerate(ele):
if j == 'A':
answer[idx]+=1
for idx,i in enumerate(answer):
answer[idx] = i / len(x)
输出为:
[0.2, 0.0, 0.6]
答案 3 :(得分:0)
这可能有帮助:
import pandas as pd
li = [['A', 'B', 'C'],
['C', 'B', 'A'],
['B', 'B', 'B'],
['C', 'C', 'A'],
['B', 'C', 'A']]
Li = pd.DataFrame(li)
L = Li.where(Li=='A',0).where(Li!='A',1)
print(L.mean())