在python中创建多个匹配多个范围的列表

在python中创建多个匹配多个范围的列表,python,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.37

我的代码有问题,我花了很长时间在上面,无法修复:

我有这样一个文件:

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  
我想做的是使用第八列上的值对行进行分组,然后提取第六列的相应值,并找到它们的最大值和最小值

像这样:

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 
我期望的输出是:

Min-80.451

Max-82.393
第二组-从100到105

Mix - 80.968

Max - 83.566
等等等等

这是我用python编写的代码:

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
感谢您的帮助:)


提前感谢

以下是我编写的一些代码,可以满足您的需要。我将查看
map
filter
的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 ""

此代码效率低下,因为它不会从以前的组中删除结果。如果您需要提高效率,请告诉我。

以下是我编写的一些代码,可以满足您的需求。我将查看
map
filter
的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