在python中处理大型列表

在python中处理大型列表,python,database,list,memory,itertools,Python,Database,List,Memory,Itertools,我有一个数学任务,在其中我应该找到一些组合,等等。这不重要,问题是我试图用itertools模块来做,它在较小的组合(6位)上运行良好,但现在我想对较大的组合(18位)做同样的事所以在这里我遇到了问题,因为我只有8GB的RAM,这个列表大约是5GB,当我的系统运行时,它会消耗所有的RAM,然后程序会丢弃内存错误。所以我的问题是:除了我正在使用的方法(下面的代码),什么是好的替代方法 poliedar\u kom=list(itertools.组合与替换(范围(0,13,18)) poliedar

我有一个数学任务,在其中我应该找到一些组合,等等。这不重要,问题是我试图用itertools模块来做,它在较小的组合(6位)上运行良好,但现在我想对较大的组合(18位)做同样的事所以在这里我遇到了问题,因为我只有8GB的RAM,这个列表大约是5GB,当我的系统运行时,它会消耗所有的RAM,然后程序会丢弃内存错误。所以我的问题是:除了我正在使用的方法(下面的代码),什么是好的替代方法

poliedar\u kom=list(itertools.组合与替换(范围(0,13,18))
poliedar_len=len(poliedar_kom)

所以当我有这个列表和它的长度时,程序的其余部分将遍历列表中的每个值,并用另一个较小列表中的值检查条件。正如我已经说过的,这是个问题,因为这个列表对于我的电脑来说太大了,但我可能做错了什么

注意:我使用的是最新的Python3.8 64位

小结:我的列表太大了,我必须循环检查条件值

编辑:我很感激所有的答案,我现在必须尝试一下,如果你对这个问题有任何新的可能的解决方案,请张贴出来


编辑2:谢谢大家,你们帮了我很多。我标记了指向Youtube视频的答案,因为它让我意识到我的代码已经生成了。谢谢大家

对于任何需要超过1e4项的应用程序,您应该避免使用python列表,因为它对内存和处理器都非常敏感

对于这种用途,我通常使用numpy数组或pandas数据帧


如果您对这些不满意,是否有某种方法可以重构算法,使您不会像使用生成器一样将所有值同时保存在内存中?

使用生成器处理大数据范围,代码的时间和空间复杂度不会随大数据量呈指数增长,有关详细信息,请参阅链接:

在你的情况下

1) 将此数量的数据存储在HDD/SDD中的文件或某物中(例如某些SQL数据库或NoSQL数据库),而不是存储在RAM中

2) 编写一个生成器,一个接一个地处理整个列表中的每个列表(一组列表以提高效率),直到结束


使用mongodb或mysql/mariadb/postgresql之类的工具来存储这么多的数据会对您有好处。

您尝试过使用生成器吗?如果你真的只需要遍历数据,这可能会起作用。我现在正在生成器上读一些东西,我想这可能会起作用,因为我设法将列表保存到.txt文件中,并且每一行都是一个值。你能告诉我在哪里可以看到一个这样的例子吗,因为我以前从未使用过这些。谢谢你的回答,我不是Python的专家,所以如果你能告诉我一些关于如何使用numpy数组的指南的话?numpy数组是类似C的数据结构。它们的许多效率来自于这样一个事实,即在初始化时分配内存,并且内存大小此后是不变的。更多信息,请参阅以下初学者指南: