2016-04-03 11 views
1

Ich arbeite an einem Programm, das durch eine FASTQ Datei liest und gibt die Anzahl der N pro Sequenz in dieser Datei. Ich schaffte es, die Anzahl von N pro Zeile zu bekommen, und ich legte diese in eine Liste. Das Problem ist, dass ich alle Zahlen in einer Liste brauche, um die Gesamtmenge von Ns in der Datei zu summieren, aber sie werden in ihrer eigenen Liste gedruckt.Wie kombiniere ich eine zufällige Anzahl von Listen in Python

C:\Users\Zokids\Desktop>N_counting.py test.fastq 
[4] 
4 
[3] 
3 
[5] 
5 

Dies ist meine Ausgabe, die Liste und die Gesamtmenge in der Liste. Ich habe Wege gesehen, um Listen manuell zu kombinieren, aber man kann Hunderte von Sequenzen haben, so dass es kein Go ist.

def Count_N(line): 
    ''' 
    This function takes a line and counts the anmount of N´s in the line 
    ''' 
    List = [] 
    Count = line.count("N") # Count the amount of N´s that are in the line returned by import_fastq_file 
    List.append(int(Count)) 

    Total = sum(List) 
    print(List) 
    print(Total) 

Das habe ich als Code, eine andere Funktion wählt die Zeilen aus.

Ich hoffe jemand kann mir dabei helfen. Vielen Dank im Voraus.

+0

Sie können schauen wollen [ 'itertools.chain'] (https://docs.python.org/3/library/itertools.html#itertools.chain). – Paul

Antwort

0

Sieht aus Ihrem Code senden Sie eine Zeile jedes Mal, wenn Sie count_N() aufrufen. Die Liste, die Sie deklariert haben, ist eine lokale Liste und wird neu initialisiert, wenn Sie die Funktion jedes Mal aufrufen. Sie können die Liste erklären global mit:

global List =[] 

Ich denke, Sie werden auch die Liste außerhalb Funktion, um erklären müssen, um es global zugreifen.

Auch wäre es besser, wenn Sie die Liste außerhalb der Funktion zusammenfassen. Jetzt summieren Sie die Liste innerhalb der Funktion. Dazu müssen Sie den Einzug mit der Funktionsdeklaration abgleichen.

+1

Es ist normalerweise schlechte Form, ein globales wie dieses zu verwenden. Wenn Sie wirklich an eine Liste anhängen möchten, sollten Sie sie wahrscheinlich als Parameter an 'Count_N' übergeben. – Paul

+1

Ja, ich stimme zu, aber geben Sie dieses Problem, ich würde auch vorschlagen, den Dateinamen und iter durch Linien innerhalb der Funktion übergeben. – denis

1

Die List Sie definieren in Ihrer Funktion nie mehr als ein Element, so dass es nicht sehr nützlich ist. Stattdessen sollten Sie wahrscheinlich return die Zählung von der Funktion, und lassen Sie den aufrufenden Code (der vermutlich in einer Art von Schleife läuft) append den Wert auf seine eigene Liste. Natürlich, da es nicht viel an der Funktion gibt, könntest du den Inhalt einfach in die Schleife verschieben!

Zum Beispiel:

list_of_counts = [] 
for line in my_file: 
    count = line.count("N") 
    list_of_counts.append(count) 
total = sum(list_of_counts)