如何使用Python 2.6中的.split()从输出生成数组/列表

时间:2014-03-02 13:48:48

标签: python arrays

我刚刚开始学习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

1 个答案:

答案 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]