更改列表中当前迭代元素的值

kle*_*fas 20 python

问题:当你使用建筑

for a in _list_:
    print a
Run Code Online (Sandbox Code Playgroud)

它打印数组中的每个项目.但是你无法改变数组.是否有可能改变数组的值(类似a = 123,但这不起作用)我知道它是可能的(例如在while循环中),但我想这样做(更优雅)

在PHP中它就像

foreach ($array as &$value) {
    $value = 123;
}
Run Code Online (Sandbox Code Playgroud)

(因为&标志,作为参考传递)

Cat*_*lus 35

for idx, a in enumerate(foo):
    foo[idx] = a + 42
Run Code Online (Sandbox Code Playgroud)

但请注意,如果你这样做,你可能应该查看列表推导(或map),除非你真的想要在适当位置进行变异(只是不要在迭代列表中插入或删除项目).

写成列表推导的相同循环如下所示:

foo = [a + 42 for a in foo]
Run Code Online (Sandbox Code Playgroud)


JBe*_*rdo 6

因为python迭代器只是内存中对象的"标签",所以设置它只会指向别的东西.

如果迭代器是一个可变对象(list,set,dict等),你可以修改它并在同一个对象中查看结果.

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

如果要将每个值设置为123,则可以使用列表索引并访问它或使用列表推导:

>>> a = [1,2,3,4,5]
>>> a = [123 for i in a]
>>> a
[123, 123, 123, 123, 123]
Run Code Online (Sandbox Code Playgroud)

但是你将创建另一个列表并将其绑定到同一个名称.