Python:组合itertools和set以节省内存

2024-10-01 09:41:36 发布

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

他们在几天前就发现了很多我从未想过的事情。我稍后再举一个例子。在

有些事情我还不清楚。文档说集合可以从iterable创建,操作符总是返回新的集合,但是他们总是从一个集合复制所有数据到另一个集合并从iterable复制数据吗?我处理大量的数据,并且希望使用行为类似itertools的集合和集合操作符。所以set([iterable])更像一个包装器,运算符union、intersection等将返回“iSets”,并且不会复制任何数据。一旦我拿到最后一套,他们都会评估。最后,我真的很想有“iSet”操作符。在

目的: 我使用mongoengine与MongoDB合作。我保存了文章。有些与用户关联,有些标记为已读,其他则显示给用户,等等。将它们包装在不加载所有数据的集合中是组合、相交等它们的好方法。显然,我可以进行特殊的查询,但并不总是这样,因为MongoDB不支持连接。所以我最后用Python做连接。我知道我可以使用关系数据库,但是,我不需要频繁的连接,在我的例子中,MongoDB的优势超过了它们。在

你觉得呢?是否已经有第三方模块?将itertools和set组合起来的几行行行可以吗?在

编辑: 我接受了马蒂恩·皮特斯的回答,因为这显然是正确的。最后我只把身份证放进一组来和他们一起工作。而且,Python中的集合有很好的运行时间。在


Tags: 数据用户文档目的mongodb运算符iterable事情
1条回答
网友
1楼 · 发布于 2024-10-01 09:41:36

集合就像dictlist;在创建时,它们从种子iterable复制引用。在

迭代器不能是集合,因为不能强制集合的唯一性要求。您不知道迭代器生成的未来值是否已经被看到过。在

此外,为了确定两个iterable之间的交集是什么,您需要从至少一个iterable加载所有数据,以查看是否存在匹配。对于第二个iterable中的每个项,您需要测试是否在第一个iterable中看到了该项。要有效地执行此操作,您需要将第一个iterable中的所有项加载到一个集合中。另一种方法是从头到尾遍历第一个iterable,从第二个iterable开始遍历每个iterable,导致性能指数级下降。在

相关问题 更多 >