在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