有没有代码在Python中为大的xranges设置子类?

2024-04-25 13:57:17 发布

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

我试图编写一些Python代码,其中包含可能非常大的集合的并集/交集。大多数情况下,这些集合本质上是set(xrange(1<<32))或类似的东西,但通常会有一些不属于集合的值范围(比如,“第5位不能是清晰的”),或者抛出额外的值。大多数情况下,集合内容可以用算法表示。在

我可以去做一些肮脏的工作来子类set并创建一些东西,但我觉得这一定是以前做过的事情,我不想花几天时间来重新发明轮子。在

哦,为了让它更难,一旦我创建了集合,我需要能够以随机顺序迭代它。迅速地。即使集合有十亿个条目。(而且十亿的条目集最好不要占用千兆字节,因为我会有很多这样的数据。)

有密码吗?有人有绝招吗?我要月亮吗?在


Tags: 代码算法内容字节顺序时间情况条目
3条回答

您正在尝试创建一个包含0到4294967295之间的所有整数值的集合。一个字节是8位,你可以得到255。99.9999940628%的值大小超过一个字节。即使您能够克服语法问题,您的集合的粗略最小大小是40亿字节,即4GB。在

你永远不可能在少于1 GB的内存中保存该集合的实例。即使是压缩,也可能是一个艰难的挤压。你的数学要聪明得多。您可以利用集合的某些属性。毕竟,这是一个非常特别的场景。你想做什么?在

你说:

For the most part, the set contents can be expressed algorithmically.

编写一个类来表示整个集合API,但在算法上确定集合包含如何。然后用一系列的类来包装其他集合来执行并集和交集的算法。在

例如,如果有一个集合a和集合b,它们是这些伪集合的实例:

>>> u = Union(a, b)

然后将u与全套API一起使用,这将反过来使用正确的逻辑查询a和{}。所有的set方法都可以设计成自动返回这些伪并集/交集,这样整个过程是透明的。在

编辑:使用非常有限的API的快速示例:

^{pr2}$

跑步让你:

True
True
True
False
True
False

如果您使用的是python3.0,那么您可以集合。集合在

相关问题 更多 >