【发布时间】:2013-11-02 22:47:03
【问题描述】:
我有一个可变序列的迭代器,例如
foo = [1, 2, 3, 4, 5]
for bar in foo:
有没有办法通过使用迭代器中包含的引用来写入 foo 中的元素?天真的作业:
bar = 42
当然不行。是否可以对迭代器中的序列元素使用“幕后”引用?
PS:使用索引的简单解决方案
for i in range(len(a)):
a[i] = 42
不适用于我的情况,因为我无法公开容器名称。
【问题讨论】:
-
不能暴露容器名?您的
for循环需要引用,因此要返回原始容器,您只需要相同的引用。 -
@MartijnPieters 想象一下,这是一个从真正的容器所在的类中出来的迭代器。迭代器不会让我自己下标。
-
在这种情况下,您无法无论如何更改容器。可以从许多不同的位置引用 Python 对象;
bar是一个这样的引用,foo引用的列表是另一个。哪一个是您想在此处重新绑定的“真实”参考?如果我将foo列表复制到另一个列表中,对42的引用是否也应该在该列表中反弹? -
该类持有一个引用列表的名称。这个列表是我要修改的。我想做 myobject.foo[i]=42,但是通过刚刚在 myobject.foo[] 上运行的迭代器。仅通过手头的“指向”元素本身的“指针”来显式地重新矢量列表元素(技术上是指针)似乎是不可能的。您似乎总是需要在 Python 中引用列表的开头,对吗?
-
你做的;因为列表中的值是不可变的,所以您需要重新绑定列表中的索引以指向 new 对象。 python 列表只是一个引用序列,就像变量名一样,尽管是通过索引而不是名称访问的。
标签: python reference iterator variable-assignment