【发布时间】:2021-06-24 13:07:04
【问题描述】:
我正在尝试读出一些人口普查数据。它由 ~53 mo 线组成,我的一个函数似乎以二次方增加了计算时间。我想过滤所有有区域供暖的区域。这个小小的列表理解让计算时间爆炸:
selection_dh = [x in ids_dh for x in ids_all]
ids_dh 是包含区域供热的区域 ID 列表,ids_all 是所有区域 ID 的列表。 ids_dh 大约是 ids_all 长度的十分之一。
知道如何使这段代码更快吗?
谢谢!
census_dh= census_all.loc[census_all.Expression== "District Heating", :]
ids_all = list(census_all.Grid_ID_100m)
ids_dh = list(census_dh.Grid_ID_100m)
selection_dh = [x in ids_dh for x in ids_all]
【问题讨论】:
-
"ds_dh 是区域 ID 的列表" 这就是问题所在。改为
set。 -
据我所知,列表成员测试是线性的,将其更改为具有几乎恒定的优化成员测试的集合。
-
还有,不用先列
ids_all,直接在推导式中使用census_all.Grid_ID_100m -
谢谢!从 ids_dh 创建
set使其速度提高了 100 倍!
标签: python big-o list-comprehension census