我对编程很陌生,不明白我的程序速度变慢的原因。
我正在处理大约 350,000 - 500,000 行的数据集,并希望得到一些指导。
我需要对照旧列表检查新列表中的所有条目,以便更新旧条目并将全新的条目添加到列表的末尾。
如果将打印语句添加到重新分配循环并且新行异常,则前几千次迭代很快,但之后程序变得非常慢。(在前 3 秒内完成了近 1000 个完整的循环,在大约第 20,000 次迭代之后,速度降低到低于 5 秒内的 100 个完整循环,到第 60,000 次迭代,它比 15 秒内的 100 个完整循环慢。)
RAM 的使用率低于 70%,而 CPU 一直保持在 48% 到 50% 之间
代码如下所示:
import gc
gc.disable() #this was added to possibly improve speed
def updateOldList(oldListOfLists, newListOfLists):
oldListIndexDict = dict()
IDNumber = <index of ID number>
for i in range(len(oldListOfLists)):
oldListIndexDict[oldList[i][IDNumber]] = i
for i in range(len(newListOfLists)):
try:
oldIndex = oldListIndexDict[newListOfLists[i][IDNumber]]
oldListOfLists[oldIndex][0] = newListOfLists[i][0]
oldListOfLists[oldIndex][3] = newListOfLists[i][3]
del(oldListIndexDict[newListOfLists[i][IDNumber]]) #this was added to limit the number of entries in the hash table to attempt to improve speed
except:
oldListOfLists= oldListOfLists + newListOfLists
return oldListOfLists
每个列表列表中的内部列表需要保持有序,所以我认为我不能使用集合。
以下两个问题非常相似,我在询问之前尝试/考虑了他们的评论。