gpt4 book ai didi

python - 强制对可迭代对象进行所有迭代

转载 作者:太空宇宙 更新时间:2023-11-04 06:07:26 24 4
gpt4 key购买 nike

我使用 map 编写了一个 for 循环,其中的函数有副作用。这是我的意思的最小工作示例:

def someFunc(t):
n, d = t
d[n] = str(n)

def main():
d = {}
map(somefunc, ((i,d) for i in range(10**3)))
print(len(d))

很明显,映射到 1000 以下的非负数的 someFunc 具有填充字典的副作用,稍后用于其他用途。

现在,鉴于上述代码的结构方式,print(len(d)) 的预期输出为 0,因为 map 返回一个迭代器,而不是一个列表(与 python2.x 不同)。因此,如果我真的想看到应用于 d 的更改,那么我将不得不迭代该 map 对象直到完成。我可以这样做的一种方法是:

d = {}
for i in map(somefunc, ((i,d) for i in range(10**3))):
pass

但这似乎不是很优雅。我可以在 map 对象上调用 list,但这需要 O(n) 内存,效率很低。有没有办法强制对 map 对象进行完整迭代?

最佳答案

你不想这样做(运行 map() 只是为了副作用),但是有一个 itertools consume recipe这适用于此:

from collections import deque

deque(map(somefunc, ((i,d) for i in range(10**3))), maxlen=0)

collections.deque() object ,配置为 0 的最大大小,消耗 map() 可迭代,不使用额外的内存。 deque 对象是 specifically optimized对于这个用例。

关于python - 强制对可迭代对象进行所有迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com