0

我必须测量不同 L 值所花费的时间,所以我想优化我的代码。我必须做的是用直径为 d 的周期点 (x,y,z) 填充一个立方体 (LxLxL),这些点是相同的。到目前为止,这就是我所拥有的:

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

有什么想法或建议吗?提前致谢!

4

2 回答 2

1

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

write()因此,在调用该函数之前,先构建一段较长的输出。您可以通过添加到一个字符串非常简单地做到这一点,或者(甚至更好)添加到一个list,并join()在完成后使用将列表折叠成一个字符串,然后write().

于 2012-10-03T09:21:30.020 回答
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)))
于 2012-10-03T10:20:15.703 回答