1

我是 python 新手,尝试用列表的数据填充数组时遇到问题

例如,我的列表如下所示:

Item TIMESTEP
0
STEPS
Id mol Sp x y z
1 1 0.25 0.63 0.58
2 1 0.85 0.96 0.10
3 2 0.36 0.45 0.89
4 3 0.45 0.16 0.22
5 3 0.85 0.65 0.77

Item TIMESTEP
10
STEPS
Id mol Sp x y z
1 1 0.85 0.33 0.68
2 1 0.65 0.26 0.20
3 2 0.56 0.35 0.79
4 3 0.75 0.36 0.12
5 3 0.65 0.75 0.87

...并像 1000 一样继续我想做的是有一个数组,其中只包含 X、Z、Y 的值,但只有第一个和下一个,因为我需要使用只是获取相对值的坐标,因此将每个时间步与前一个时间步进行比较。直到现在我有这个,但数组没有给出任何结果......你能告诉我什么是错的或如何纠正它吗?

numofmol = 600
B = np.zeros((numofmol,6)) #array filled with ceros with 6 columns and 2688 lines
A = list() # empty list A

c=0


with open('./square/output/Sq.lammpstrj') as inf:
    for line in inf:
        parts = line.split() # split line into parts 
        #print parts
        if len(parts) > 1 :
            if parts[1] == 'TIMESTEP' :
                c +=1
            #print c
        if len(parts) == 5 and numofmol >= parts[0] > 0  :
            if c % 2 == 0:
                    B[parts[0],0] = parts[2]
                    B[parts[0],1] = parts[3]
                    B[parts[0],2] = parts[4]
            else:
                    B[parts[0],3] = parts[2]
                    B[parts[0],4] = parts[3]
                    B[parts[0],5] = parts[4]

            print B

先感谢您

4

1 回答 1

0

有点难以获得,你真正想要什么,但你可以尝试这样的事情:

data, c = {}, 0
with open('./square/output/Sq.lammpstrj') as inf:
    for line in inf:
        parts = line.split()
        if len(parts) > 1 and parts[1] == 'TIMESTEP':
            c += 1
        if len(parts) == 5:
            if c % 2 == 1:
                data[parts[0]] = parts[2:]
            else:
                data[parts[0]] += parts[2:]

B = np.array(data.values())
于 2013-10-11T12:15:07.457 回答