如何改进这些代码?

时间:2012-10-03 09:19:44

标签: python

我必须通过改变L值来测量所需的时间,因此我想优化我的代码。我必须做的是填充一个立方体框(LxLxL),其直径d的周期点(x,y,z)是相同的。到目前为止,这就是我所拥有的:

L=10
d=2

x,y,z = 0,0,0
counter=0

with open("question1.xyz","w") as f:
    while x<=L-d:
        while y<=L-d:
            while z<=L-d:
                f.write('H {} {} {}\n'.format(x,y,z))
                counter=counter+1
                z=z+d
            z=0
            y=y+d
        z,y=0,0
        x=x+d

然后我必须输出这种格式的文件(.xyz文件):

H 0.000000 0.000000 0.000000
H 0.000000 0.000000 1.000000
H 0.000000 0.000000 2.000000
H 0.000000 0.000000 3.000000
H 0.000000 0.000000 4.000000

有任何想法或建议吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

您应该尽量减少拨打f.write()的次数。这最大限度地减少了Python运行时必须进行系统调用的次数,这通常很昂贵。

因此,在调用write()函数之前,请构建更长的输出。您可以通过添加到字符串,或者(甚至更好地)添加到列表来完成此操作,并在完成将列表折叠为单个字符串时使用join(),然后你write()

答案 1 :(得分:1)

from itertools import product

L=10
d=2

with open("question1.xyz","w") as f:
    f.write('\n'.join('H {} {} {}'.format(*t) for t in product(range(0, L, d), repeat=3)))