我刚刚开始学习Python(2.X),在这里我试图从文件中“隔离”有用的数据集,以便我可以进行计算。
我可以通过拆分字典来打印出数据行(数字):
for n in lines:
lx=n.split()[3]
print lx
我会从字典索引#3中获取所需的数据集。就输出而言,执行脚本后会是这样的:
1129.805
1291.123
2132.193
1239.182
1513.452
1287.783
[user@emach] $
但后来我想将它们变成列表或数组
l=[1129.805, 1291.123, 2132.193, 1239.182, 1513.452, 1287.783]
print l
[1129.805, 1291.123, 2132.193, 1239.182, 1513.452, 1287.783]
这样我就可以计算出这组数字(不仅仅是6个数字)。我知道我可以使用sum()
,len()
和其他基本的内置数学函数进行计算。我试着在不使用itertools的情况下保持简单,我在很多帖子中都看到了这一点,专门用于获取列表的总和或平均值。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
这就是我所拥有的:
f=open("1FKA.pdb",'r')
lines=f.readlines()
f.close()
for n in lines:
lx=[]
lxx=[]
if n[:4]=="ATOM":
lx=n.split()[3]
lxx=[float(n.split()[3]) for n in lines]
print lx
print lxx
Traceback (most recent call last):
lxx=[float(n.split()[3]) for n in lines]
IndexError: list index out of range
答案 0 :(得分:1)
使用列表理解:
[n.split()[3] for n in lines]
如果n.split()[3]
为您提供字符串,请尝试:
[float(n.split()[3]) for n in lines]
您还需要在列表推导中过滤以“ATOM”开头的行,不要使用该嵌套循环:
[float(n.split()[3]) for n in lines if n[:4]=="ATOM"] #or n.startswith("ATOM") instead of n[:4]=="ATOM"
甚至:
[float(n.split()[3]) for n in lines if n.startswith("ATOM") and len(n.split())>3]