内部列表每个位置的字符频率

时间:2019-03-21 11:50:30

标签: python python-3.x list

我有一个列表列表。

[[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循环中进行处理。

4 个答案:

答案 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())