我明白,要高效地遍历字典而不必制作整个字典的新副本:
for k,v in iter(d.items()):
print("k={} v={}".format(k,v)) # or do whatever. This is just placeholder code.
问:python3.5.4是否有某种方法可以直接给我v值,作为指向它的指针或引用,而不是将值复制到for循环中的局部变量v?如果v是一个大数组,这会对我有所帮助,因为每个v都是一个numpy数组,在我的应用程序中有10^5或10^6个元素,甚至更多,而且我的迭代器循环有数百万次的迭代。在其他语言中,我使用了引用和指针,但据我所知,在python3.5.4中没有使用它们。你知道吗
谢谢分享你的专业知识。你知道吗
更新:
下面是一些numpython代码,我用来证明v不是本地副本,而是对numpy数组的引用。这对我来说是个好消息。这证实了获胜的回答者所说的话。感谢获奖的回答者和所有其他评论声称相同。我很高兴!!再次感谢所有参与的人。你知道吗
import numpy as np
x = np.array([8,6,7,5,3,0,9])
d = {}
d["mouse"] = x
for k,v in iter(d.items()):
v[1] = 2
print(d)
字典现在在一个数组位置包含一个新值。这意味着v[1]=2行操作的是原始数组,而不是数组的本地副本。你知道吗
for k, v in d.items(): ...
执行两个赋值。在每个迭代中,k
被分配给键,v
被分配给从d.items()
上的迭代器产生的下一个(键,值)元组的值。你知道吗作业从不复制数据,所以
已经发生了。你知道吗
此外,在Python3.5中,
dict.items
的返回值是字典中数据的一个非常有效的视图。总之,你已经拥有了你想要的一切。你知道吗相关问题 更多 >
编程相关推荐