这句话运行得非常缓慢,我已经没有想法来优化它。有人可以帮助我吗?
[dict(zip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list]
small_list
只包含大约6个元素。
大小为209,510的really_huge_list_of_list
大约需要16.5秒才能完成执行。
谢谢!
修改
really_huge_list_of_list
是一个生成器。为任何困惑道歉。
大小从结果列表中获得。
答案 0 :(得分:1)
可能的小改进:
[dict(itertools.izip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list]
此外,您可以考虑使用生成器而不是列表推导。
答案 1 :(得分:1)
要扩展评论试图说的内容,您应该使用生成器而不是列表理解。您的代码目前看起来像这样:
[dict(zip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list]
你应该改为:
def my_generator(input_list_of_lists):
small_list1 = ["wherever", "small_list1", "comes", "from"]
for small_list2 in input_list_of_lists:
yield dict(zip(small_list1, small_list2))
你现在正在做的是在对你的结果列表做任何事情之前,将所有结果迭代到你真正庞大的列表上,并建立一个巨大的结果列表。相反,您应该将该列表理解转换为生成器,这样您就不必构建包含200,000个结果的列表。它构建的结果列表占用了大量的内存和时间。
......或者更好的是,只需将其外部括号更改为括号,即可将该列表理解转换为生成器理解:
(dict(zip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list)
这就是你真正需要做的。列表推导和生成器理解的语法几乎完全相同,如果您理解列表理解,您将理解相应的生成器理解。 (在这种情况下,我首先以“长形式”写出了生成器,这样你就可以看到那种理解扩展到了什么。)
有关生成器理解的更多信息,请参阅here,here和/或here。
希望这可以帮助您为Python工具箱添加另一个有用的工具!