【发布时间】:2020-10-03 05:18:59
【问题描述】:
这是一个非常慢的循环(~1.5[it/s] 使用 tqdm 来测量它)
对于上下文,对象指的是本地的 flask-SQLAlchemy 管理的 postgres 数据库的模型。即:网络传输速度不是速度慢的原因。
for author in tqdm(authors):
new_score = 0
for book in author.maintitles:
new_score = new_score + book.score
author.score = new_score
进一步明确:大约有 50 万本书,有大约 5 万作者。每本书可以由多个作者撰写。
我没有返回列表,但我确信这可以改进 - 列表理解真的可以改进吗?
类似...
[[(new_score = new_score + book.score,
author.score = new_score) for book in author.maintitles] for author in tqdm(authors)]
【问题讨论】:
-
列表推导不会让事情变得更快。如果您不想构建列表,请不要使用列表推导式。
-
无论是什么让这个循环如此缓慢,我们无法仅从发布的代码中判断,也无法对其进行优化。
-
谢谢,在主要问题中添加了更多上下文 - 希望提供更多清晰度:)
-
所以作者确实只有一大堆书?这个设置听起来很人为——这是某种挑战问题吗?如果是这样,您可能对某些本应使用更智能算法解决的潜在问题采取了错误的方法。
-
提到数据库表明这不是一个挑战问题,但即使是历史上最多产的作者也几乎没有 1000 本书。
标签: python sqlalchemy flask-sqlalchemy list-comprehension nested-loops