【发布时间】:2018-08-17 16:40:34
【问题描述】:
我正在尝试展开一些嵌套循环,以便(可能)以牺牲内存为代价获得更好的性能。在我的场景中,我最终会得到一个大约 300M 元素(元组)的列表,我必须以(或多或少)随机顺序产生这些元素。
在这个数量级上,random.shuffle(some_list) 真的不再适合了。
下面的例子说明了这个问题。请注意,在 x86_64 Linux 和 CPython 3.6.4 上,它将占用大约 11 GB 的内存。
def get_random_element():
some_long_list = list(range(0, 300000000))
for random_item in some_long_list:
yield random_item
到目前为止,我的想法是在每次迭代中简单地生成一个随机索引,并从列表中(无限期地)产生随机选择的元素。它可能会多次生成某些元素并完全跳过其他元素,这是值得考虑的权衡。
在合理的内存和 CPU 时间范围内,我还有哪些其他选项可能只产生列表中的每个元素一次?
【问题讨论】:
-
你有没有考虑过使用
random.choice或其他类似的功能?
标签: python python-3.x random generator