改进Python代码片段Performan

2024-04-23 13:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这个语句运行得很慢,我已经没有办法优化它了。有人能帮帮我吗?你知道吗

[dict(zip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list]

small_list只包含大约6个元素。你知道吗

大小为209510的really_huge_list_of_list大约需要16.5秒才能完成执行。你知道吗

谢谢你!你知道吗

编辑:

really_huge_list_of_list是一个生成器。抱歉给你带来任何困惑。 大小从结果列表中获取。你知道吗


Tags: ofin元素for语句zipdictlist
2条回答

要扩展评论想要说的内容,应该使用生成器而不是列表。您的代码当前如下所示:

[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))

你现在要做的是,在你对这个巨大的列表做任何事情之前,获取所有迭代的结果,并建立一个巨大的结果列表。相反,你应该把这个列表变成一个生成器,这样你就不必建立一个包含200000个结果的列表。它建立的结果列表占用了大量的内存和时间。你知道吗

。。。或者更好的方法是,将列表理解转化为生成器理解,将其外括号改为圆括号:

(dict(zip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list)

这就是你真正需要做的。列表理解和生成器理解的语法几乎完全相同:如果你理解了一个列表理解,你就会理解相应的生成器理解。(在本例中,我首先用“long form”写出了生成器,这样您就可以看到这种理解扩展到了什么)。你知道吗

有关生成器理解的更多信息,请参见herehere和/或here。你知道吗

希望这能帮助您在Python工具箱中添加另一个有用的工具!你知道吗

可能的小改进:

[dict(itertools.izip(small_list1, small_list2)) for small_list2 in really_huge_list_of_list]

此外,您可以考虑使用生成器而不是列表理解。你知道吗

相关问题 更多 >