2013-01-22 1 views
-1

J'ai écrit ce codeLa répétition d'une fonction sur plusieurs éléments dans une liste

import sys 
file = open(sys.argv[1], 'r') 
string = '' 
for line in file: 
    if line.startswith(">"): 
     pass 
    else: 
     string = string + line.strip() 
#print (list(string)) 
w = input("Please enter window size:") 
test = [string[i:i+w] for i in range (0,len(string),w)] 
seq = input("Please enter the number of sequences you wish to read:") 
#print (test[0:seq]) 

Il génère une liste qui ressemble this-

['TAAAACACCC', 'TCAATTCAAG', 'GGTTTTTGAG', 'CGAGCTTTTT', 'ACTCAAAGAA', 'TCCAAGATAG', 'CGTTTAAAAA', 'TTTAGGGGTG', 'TTAGGCTCAG', 'CATAGAGTTT']

Maintenant, l'étape suivante consiste à lire la l'occurrence des lettres GC (ou peut être CG) dans chaque élément de la liste. Y at-il un moyen de boucle à travers la liste de telle sorte que le fichier de sortie ressemble à:

Segment 1- The %GC is <the calculated number> 
Segment 2- The %GC is <the calculated number> 
Segment 3- The %GC is <the calculated number> 

Depuis le fichier est wayy à grande et le nombre de segments (chaque élément individuel de la liste comme 'TAAGATATA') i sera obtenir sera énorme, je ne sais pas comment obtenir le numéro (1,2,3 ...) du segment dans le fichier de sortie. Aussi depuis que je suis nouveau à python (et programmation) je ne suis pas très bon à l'utilisation des fonctions très bien.

+0

Montrez-nous votre code que vous avez écrit jusqu'à présent, frère –

+0

Je ne comprends pas la question - pouvez-vous donner un exemple plus explicite, que sont les segments dans ce contexte? –

+0

@ TheodrosZelleke- C'est un programme biologique. prendra beaucoup de temps pour expliquer et est inutile. Tout ce que je veux, c'est faire une boucle dans le fichier afin de pouvoir obtenir le numéro de segment (chaque élément de list = segemnt) et son GC% correspondant (dont je peux m'occuper) –

Répondre

1

Je ne suis pas sûr de ce que vous demandez.

inp = ['TAAAACACCC', 'TCAATTCAAG', 'GGTTTTTGAG', 'CGAGCTTTTT', 'ACTCAAAGAA', 'TCCAAGATAG', 'CGTTTAAAAA', 'TTTAGGGGTG', 'TTAGGCTCAG', 'CATAGAGTTT'] 

for i, segment in enumerate(inp): 
    print "Segment {} - The %GC is {}".format(i, segment.count("GC")) 

donne

Segment 0 - The %GC is 0 
Segment 1 - The %GC is 0 
Segment 2 - The %GC is 0 
Segment 3 - The %GC is 1 
Segment 4 - The %GC is 0 
Segment 5 - The %GC is 0 
Segment 6 - The %GC is 0 
Segment 7 - The %GC is 0 
Segment 8 - The %GC is 1 
Segment 9 - The %GC is 0 
+0

j'utilise python 2.7. Il n'y a pas de fonction de format, je suppose. –

+0

Comme je suis, et il y a (c'est une méthode d'instance sur les chaînes). – katrielalex

0

Vous pouvez essayer la fonction map en python. http://docs.python.org/3.1/library/functions.html#map fournit l'utilisation générale de celui-ci, mais voici un exemple utilisant Python3.

def func1(myObject): 
    '''Trivial example function''' 
    return myObject * 2 
myList = [1,2,3] 
myMap = map(func1,myList) 
print(list(myMap)) 

carte exécute une méthode sur chaque élément dans une itérable (liste par exemple, chaîne, etc.) et place le résultat de chaque exécution de la méthode dans une carte, qui peut ensuite être imprimé sous forme de liste ou itéré comme une liste.

Si vous vouliez que votre myObject soit lui-même une liste, cela ne devrait pas poser de problème, tant que vous l'utilisez comme tel.

Est-ce que cela répond à votre question?

Questions connexes