2016-04-03 5 views
1

私は、トラフをFASTQというファイルに読み込み、このファイル内のシーケンスごとにNの量を与えるプログラムを開発しています。私は1行につきNの数を得ることができたので、これをリストに入れました。 問題は、ファイル内のNの総量を合計するためには1つのリスト内のすべての数値が必要ですが、それらはそれぞれのリストに印刷されます。Pythonでランダムな量のリストを結合するには

これは私の出力であり、リスト内の合計金額です。手動でリストを結合する方法を見たことがありますが、数百のシーケンスを持つことができます。

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) 

これは私がコードとして持っているもので、別の機能が行を選択します。

私は誰かがこれを手伝ってくれることを願っています。 ありがとうございます。

+0

:たとえば

。 – Paul

答えて

0

あなたのコードからは、count_N()を呼び出すたびに1行を送信します。宣言したリストはローカルリストであり、毎回その関数を呼び出すと再初期化されます。

global List =[] 

グローバルにアクセスするには、関数の外にリストを宣言する必要があると思います。

また、関数外のリストを合計すると、より良い結果が得られます。今すぐあなたは関数内のリストを集計しています。そのためには、インデントと関数宣言を一致させる必要があります。

+1

このようなグローバルを使うのは、通常は悪い形です。本当にリストに追加したいのであれば、それを単にパラメータとして 'Count_N'に渡すべきでしょう。 – Paul

+1

ええ私は同意しましたが、この問題を与えられた私はまた、関数内の行を介してファイル名とiterを渡すことをお勧めします。 – denis

1

あなたの関数で定義しているListは、複数の項目を取得することはないのであまり役に立ちません。代わりに、おそらくreturn関数からのカウントをし、呼び出し元のコード(おそらく何らかのループで実行されている)appendの値を独自のリストに置きます。もちろん、関数にはあまり意味がないので、ループの内容を移動するだけでもよいでしょう!あなたは[ `itertools.chain`](https://docs.python.org/3/library/itertools.html#itertools.chain)に見てみたいことがあります

list_of_counts = [] 
for line in my_file: 
    count = line.count("N") 
    list_of_counts.append(count) 
total = sum(list_of_counts) 
関連する問題