【发布时间】:2020-08-02 21:21:28
【问题描述】:
我想测试一个算法的效率,所以我决定制作一个包含所有输入测试用例的文本文件。我的主要目标是制作两个最大大小为 10^5 的不相交列表。所以最简单的方法是制作两个列表。
列表 1 将从 0 开始,一直到 99999
列表 2 将从 -100000 开始,一直到 -1
所以第一组列表将是
列表1:-100000
list2: 0
第二组将是
列表1:-100000 -99999
list2: 0 1
它将继续进行到第 10^5 次迭代
列表1:-100000 -99999 ... -1
list2: 0 1 ... 99999
所以我写了这段代码
#!/usr/bin/python3
ip = open("input.dat", "w+")
for length in range(1, 10**5+1):
arr1 = [var1 for var1 in range(length)]
arr2 = [var2-(10**5) for var2 in range(length)]
ip.writelines(["%s " % item for item in arr1])
ip.writelines("\n")
ip.writelines(["%s " % item for item in arr2])
ip.writelines("\n\n")
ip.close()
但这是非常低效的,并且需要很长时间来处理。有没有有效的方法来做同样的事情?
【问题讨论】:
-
您可能不想在每次写入时都创建一个新列表。而是将缺少的项目附加到上一个列表中。此外,似乎没有必要在每个数字上附加一个空格。这是有原因的吗?
-
@PharoahJardin 感谢回复... )。顺便说一句,您的回答让我想到了一种尝试的方法,我可以生成一个大小为 10^5 的列表,然后使用它,我可以直接将其子列表写入文件,这似乎是一个可行的解决方案,但这只是提高内存效率,而不是时间效率,对吧?
-
当然可以。但是将一系列连续整数写入文件似乎也没有必要。您不能只遍历算法本身的范围吗?
-
所以我尝试运行你的代码的修改版本(而不是附加到一个列表),但它仍然没有完成运行所以我猜它仍然非常低效哈哈
-
@PharoahJardin 正如我所说,它仅用于测试目的,我希望它在一个 dat 文件中,以便我以后可以参考它。是的,很好,我们可以通过算法本身的范围,但这不是我的目的。好吧,我希望有一条出路。非常感谢您的帮助
标签: python list algorithm performance file