Частота символа в каждой позиции внутреннего списка - PullRequest
2 голосов
/ 21 марта 2019

У меня есть список списков.

[[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 ]

4 голосов
/ 21 марта 2019
[inner.count('A')/len(inner) for inner in zip(*lst)]
2 голосов
/ 21 марта 2019

Вам нужно:

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]
1 голос
/ 21 марта 2019

Вы можете перебрать исходный список, а затем перебрать внутренние циклы, чтобы найти ответ:

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]
0 голосов
/ 21 марта 2019

Это может помочь:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...