2

Python初心者はこちら。テキストファイルを列ごとに繰り返し処理しています。

for line in Input:
    line = line.rstrip() 
    fields = line.split("\t")   
    for col in fields[5:]:

列を反復処理するときに、どの列にいるかをどのように追跡しますか?現在の関連する列を出力に出力したいので、結果が得られたら、結果がどの列を参照しているかがわかります。当たり前の答えがあるようですが、わかりません!

助けてくれてありがとう。ここの人々の有用性は圧倒的だと思います。

いくつかの入力/出力の例:

入力ファイルからの行:

 chr20   1032    .       A     1/1 1/1 1/1 0/1 0/0
 chr20   1326    .       T     1/1 1/1 1/1 0/1 0/0
 chr20   1388    .       C     0/0 1/1 ./. 0/1 0/0

次に、これらの行を調べて、列5(1 / 1、1 / 1、0 / 0など)を調べ、いくつかの出力統計を計算します。出力ファイルには、列5を使用して計算された行数xごとの統計が含まれています。出力ファイルには、列6、7などの結果も含まれ、出力ファイルの行には、データがどの列であるかが示されます。から計算されました。本質的には、列ごとに個別にスクリプトを再実行する手間を省くためです。

出力例:

5   chr1    230344070   231345012   1000942 200720  66560   119841  7160    5.63775088385   94.3622491161
5   chr1    231345012   232345029   1000017 167920  55040   106160  3360    3.06793279766   96.9320672023
5   chr1    232345029   233345195   1000166 179280  64841   96079   9180    8.72134449311   91.2786555069

ここでの最初の列は、列5の値に基づいて計算されたという事実を示しています。

インデックスの場合、enumerate(fields [5:])のcol:

一番、

ルバル

4

2 に答える 2

4

あなたはこのようなことを試すことができます

for i,col in enumerate(fields[5:], 5):
    ....

enumerate()は、インデックス値を生成します。上記の5で示すように、enumerate()の2番目のパラメーターとして開始値が指定されていない限り、デフォルトでは0から始まります。

変数iは値5で始まり、作業中の現在の列とcol(以前と同様に)その列のフィールドの値を追跡できます。

または、利便性と変更を容易にするために、変数を使用することもできます。

start_col = 5
for i,col in enumerate(fields[start_col:], start_col):
    ....

---以下のコメントへの返信で更新:

あなたのコメントを理解できるかどうかはまだよくわかりませんが、投稿したループがより大きなループ内にある場合は、次のように現在の列を追跡できます。

cur_column = 5
for line in Input:
    line = line.rstrip() 
    fields = line.split("\t")   
    for col in fields[cur_colum:]:
       ...
       ...

cur_column += 1 # done processing current column, increment value to next column

コードが大きすぎて投稿できない場合は、いくつかの簡単な入力/出力の例を投稿すると役立ちます。より多くの情報なしで助ける方法を本当に知るのは難しい。これがお役に立てば幸いです。

于 2012-06-03T13:27:31.870 に答える
1

組み込み関数を使用して列挙することができます

for index, col in enumerate(fields[5:]):
于 2012-06-03T13:38:01.060 に答える