更改当前迭代元素的值

36 投票
3 回答
66892 浏览
提问于 2025-04-16 20:33

问题:

当你使用这个构造时

for a in _list_:
    print a

它会打印出数组中的每一个项目。但是你不能修改这个数组。有没有办法可以改变数组的值(比如说 a=123,但这样不行)我知道在某些情况下是可以做到的(比如在 while 循环中),但我想用这种方式(更优雅)来实现。

在 PHP 中,这样写会像

foreach ($array as &$value) {
    $value = 123;
}

(因为 & 符号的原因,它是以引用的方式传递的)

3 个回答

1

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个函数时,发现它的表现和预期不一样。这种情况很常见,尤其是对于刚开始学习编程的人来说。

解决这些问题的第一步是要仔细检查代码,看看有没有拼写错误或者逻辑上的问题。很多时候,错误就藏在这些小细节里。

另外,理解每个函数的作用也很重要。每个函数都有它特定的功能,知道它是干什么的,可以帮助我们更好地使用它。

如果遇到困难,不妨查阅一些资料或者向别人请教。编程社区里有很多热心的人,他们乐意分享经验和解决方案。

总之,编程是一个不断学习和实践的过程,遇到问题时不要气馁,慢慢来,总会找到解决办法的。

for a in _list_:
  _list_[_list_.index(a)]=123
8

因为Python中的迭代器其实就是指向内存中某个对象的“标签”,所以如果你把它设置成指向其他东西,它就会指向新的对象。

如果这个迭代器指向的是一个可变对象(比如列表、集合、字典等),你可以直接修改它,这样你会在同一个对象上看到变化。

>>> a = [[1,2,3], [4,5,6]]
>>> for i in a:
...    i.append(10)
>>> a
[[1, 2, 3, 10], [4, 5, 6, 10]]

如果你想把每个值都设置成,比如说,123,你可以用列表的索引来访问它,或者使用列表推导式

>>> a = [1,2,3,4,5]
>>> a = [123 for i in a]
>>> a
[123, 123, 123, 123, 123]

不过这样做的话,你会创建一个新的列表,并把它绑定到同样的名字上。

51
for idx, a in enumerate(foo):
    foo[idx] = a + 42

不过要注意,如果你在这样做的话,可能应该了解一下列表推导式(或者 map),除非你真的想要在原地修改(只要不在正在遍历的列表中插入或删除项目就可以)。

用列表推导式写的同一个循环看起来是这样的:

foo = [a + 42 for a in foo]

撰写回答