J'ai une liste de listes.
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]]
Je veux calculer la fréquence "A" à chaque position de la liste interne.
Résultat attendu: p >
0.2, 0 , 0.6
Les listes internes sont de longueur égale.
[[A, B, C],[C, B, A],[B, B, B],[C, C, A],[B, C, A]]
Je ne sais pas comment aborder à la seconde boucle for. p>
4 Réponses :
[inner.count('A')/len(inner) for inner in zip(*lst)]
Salut @nauer. y a-t-il un moyen de trouver la fréquence de A ou B en utilisant regrex ou une telle méthode. La production attendue serait maintenant de 0,6, 0,6, 0,8
Additionnez simplement les fréquences. [(inner.count ('A') + inner.count ('B')) / len (inner) for inner in zip (* lst)]
Vous avez besoin de:
[0.2, 0.0, 0.6]
Résultat:
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)
La longueur de la liste intérieure n'est pas de 3, elle peut s'étendre jusqu'à 200 mais toujours la même longueur.
Salut @AkshayNevrekar. existe-t-il un moyen de trouver la fréquence de A ou B en utilisant regrex ou une telle méthode. La production attendue serait maintenant de 0,6, 0,6, 0,8
Vous pouvez parcourir la liste d'origine, puis parcourir les boucles internes pour trouver la réponse comme:
[0.2, 0.0, 0.6]
La sortie est:
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)
Merci Harshit, mais ces boucles imbriquées prendront beaucoup de temps lorsque vous aurez une liste plus grande. Quoi qu'il en soit, ça marche ...
Cela peut aider:
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())
Il y a 5 listes internes et à la première position de chaque liste interne A n'est présente qu'une seule fois. Donc 1/5 vaut 0,2. Corrigez-moi si je me trompe