python - 具有 O(1) 随机删除和添加的数据结构,用于改组生成器顺序
问题描述
我需要一个数据结构,可以让您O(1)
及时添加元素并随机删除它们。
这样做的原因是我需要从生成器中洗牌数据,但由于大小,我不能同时将所有内容加载到内存中。
这是一个使用示例,它会自动打乱生成器表达式生成的结果的顺序,而无需将所有内容加载到内存中:
def generator_shuffler(generator)
a = magical_data_structure_described_above
for i in generator:
a.add(i)
if len(a) > 10: yield a.poprandom()
最初我尝试了 python set()
,但是从这里开始:Set.pop() is not random? ,似乎set()
实际上并没有以任意顺序删除项目。我将如何使用上述用法实现数据结构?
解决方案
如果你想随机弹出,为什么不使用列表并通过将最后一个元素与一些随机选择的元素交换然后删除新的最后一个元素来实现弹出呢?这不会保留数据结构中剩余元素的顺序,但是“随机弹出”和“随机播放”表明您并不关心。
推荐阅读
- amqp - Graalvm 本机映像 + amqp pid java 客户端 + 提供程序方案无法识别:[amqps] 错误
- algorithm - 编码 ISO 一年中的一周 - 第 53 周的问题
- java - 在源代码中存储加密凭据是否安全
- python - 简单问题:python中的split函数
- python-3.7 - scheme.exceptions.ConversionError: [u'没有给出默认或明确的语言环境。']
- amazon-web-services - 创建多个 AWS 账户并使用 CDK 为其填充服务
- ckeditor - 如何在ckeditor4中设置默认字体大小?
- python - 在python中输入多个包含不同列表的文件
- r - 缺少数据的 svydesign 函数
- visual-studio-code - VSCode MakeFile 工具配置