在Python3中,迭代字典而不将值复制到局部变量,而只复制引用或指针?

2024-09-30 01:27:23 发布

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

我明白,要高效地遍历字典而不必制作整个字典的新副本:

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行操作的是原始数组,而不是数组的本地副本。你知道吗


Tags: orinnumpyformatfor字典np副本
1条回答
网友
1楼 · 发布于 2024-09-30 01:27:23

for k, v in d.items(): ...执行两个赋值。在每个迭代中,k被分配给键,v被分配给从d.items()上的迭代器产生的下一个(键,值)元组的值。你知道吗

作业从不复制数据,所以

Is there some way that python3.5.4 can give me the v value directly, as a pointer to it or a reference, rather than copying the value to local variable v in my for loop

已经发生了。你知道吗

此外,在Python3.5中,dict.items的返回值是字典中数据的一个非常有效的视图。总之,你已经拥有了你想要的一切。你知道吗

相关问题 更多 >

    热门问题