2016-10-14 5 views
1

にいくつかの範囲に一致してください:複数のリストは、私は自分のコードに問題があると私はそれに長い時間を費やしていると私はそれを修正することができないのpython

私はこのようなファイルを持っている:

ATOM 1375 N PHE F 411  81.522 91.212 98.734 1.00 0.00   N 
ATOM 1376 H PHE F 411  82.393 91.667 97.546 1.00 0.00   H 
ATOM 1377 CA PHE F 411  80.451 91.974 95.377 1.00 0.00   C 
ATOM 1378 CB PHE F 411  80.968 93.339 100.842 1.00 0.00   C 
ATOM 1379 CG PHE F 411  81.813 93.277 102.083 1.00 0.00   C 
ATOM 1381 HD1 PHE F 411  83.566 92.729 105.124 1.00 0.00   H 

私がしたいのは、8番目の列の値を使用して行をグループ化し、6番目の列の対応する値を抽出し、最大値と最小値を見つけることです。 100から105

Mix - 80.968 

Max - 83.566 

などなどなど

へ -

Min-80.451 

Max-82.393 

第二群:

Group 1 8th column values from 95 to 100 

ATOM 1375 N PHE F 411 81.522 91.212 98.734 1.00 0.00 N 

ATOM 1376 H PHE F 411 82.393 91.667 97.546 1.00 0.00 H 

ATOM 1377 CA PHE F 411 80.451 91.974 95.377 1.00 0.00 C 

私の所望の出力は次のようになります。このよう

これは私のコードpythです上:

def get_x(file): 
    x=[] 
    for line in file: 
     new_line=line.split() 
     for z in range(80, 140, 2): 
      if (float(new_line[8]) >z and float(new_line[8])<z+2): 
      x.append(float(new_line[6])) 
      else: 
      pass 
    maxx=max(x) 
    minx=min(x) 
    print maxx, minx 

私が手出力は

Min- 80.451 ; Max- 83.566 

などの最小とすべての値の最大値は、すべてのヘルプは高く評価され:)

感謝を事前にここで

答えて

0

はですあなたが探しているものは私がまとめたコードです。私はmapfilterのpythonのドキュメントを見ています。これは、このようなことを行うのに便利です。ここで

text = """ATOM 1375 N PHE F 411  81.522 91.212 98.734 1.00 0.00   N 
ATOM 1376 H PHE F 411  82.393 91.667 97.546 1.00 0.00   H 
ATOM 1377 CA PHE F 411  80.451 91.974 95.377 1.00 0.00   C 
ATOM 1378 CB PHE F 411  80.968 93.339 100.842 1.00 0.00   C 
ATOM 1379 CG PHE F 411  81.813 93.277 102.083 1.00 0.00   C 
ATOM 1381 HD1 PHE F 411  83.566 92.729 105.124 1.00 0.00   H """ 
lines = text.split('\n') 

data = [line.split() for line in lines] 

groups = [ 
    (95, 100), 
    (100, 105), 
] 

for i in range(len(groups)): 
    gMin, gMax = groups[i] 
    results = filter(lambda x: gMin <= float(x[8]) < gMax, data) 
    results = map(lambda x: float(x[6]), results) 

    print "Group", i+1, "8th column values from", gMin, "to", gMax 
    print "Min -", min(results) 
    print "Max -", max(results) 
    print "" 

が出力されます。

Group 1 8th column values from 95 to 100 
Min - 80.451 
Max - 82.393 

Group 2 8th column values from 100 to 105 
Min - 80.968 
Max - 81.813 

それは、前のグループからの結果を削除していないので、このコードは非効率的です。あなたが追加された効率が必要なら私に知らせてください。

+0

ありがとうございました@Alden!それはちょうど良いです。 – pikie