gpt4 book ai didi

python - 将 itertools.product 转换为列表时笛卡尔积内存错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:55 25 4
gpt4 key购买 nike

我正在尝试创建列表列表的笛卡尔积。当我尝试将结果转换为列表时,它会给我一个内存错误。如果我运行它而不将其转换为列表,它运行良好。

lists = [['a','b','c' ],['a','b','c' ],['a','b','c' ],['a','b','c' ],['a','b','c' ],['a','b','c' ],['a','b','c' ],['a','b','c' ],['a','b','c' ]]
my_product = list(itertools.product(*lists))

我什至尝试使用 itertools.dropwhile 过滤一些结果,使其更小,然后将其转换为列表,并且得到相同的结果。

filtered = itertools.dropwhile(lambda x: x[1]!=x[2] and x[3]!=x[4] and x[3]!=x[5] and x[4]!=x[5], my_product)

最佳答案

您正在创建 19683 个包含 9 个元素的新元组。您的计算机没有足够的内存可同时容纳所有这些元组。

如果您使用list(),那么只会创建一个生成器对象,当您对其进行迭代时,该对象将一一生成 19683 .

您应该过滤 itertools.product() 的输出而不将其转换为列表:

my_product = itertools.product(*lists)
filtered = itertools.dropwhile(lambda x: x[1]!=x[2] and x[3]!=x[4] and x[3]!=x[5] and x[4]!=x[5], my_product)

您可以将 filtered 转换为列表,但如果您所做的只是循环该列表并逐项处理项目,则不应该这样做。仅当您需要随机访问元素时才将其转换为列表。

关于python - 将 itertools.product 转换为列表时笛卡尔积内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com