问题: 当你使用建筑
for a in _list_:
print a
它打印数组中的每个项目。但是你无法改变数组。是否有可能改变数组的值(类似于a = 123,但这不起作用) 我知道这是可能的(例如在while循环中),但我想这样做(更优雅)
在PHP中就像
foreach ($array as &$value) {
$value = 123;
}
(因为&
符号,作为参考传递)
答案 0 :(得分:34)
for idx, a in enumerate(foo):
foo[idx] = a + 42
但请注意,如果你这样做,你可能应该查看列表推导(或map
),除非你真的想要在适当位置进行变异(只是不要插入或删除迭代的项目 - 在列表上。)
与列表推导相同的循环如下所示:
foo = [a + 42 for a in foo]
答案 1 :(得分: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]]
如果你想将每个值设置为123,你可以使用列表索引并访问它或使用list comprehension:
>>> a = [1,2,3,4,5]
>>> a = [123 for i in a]
>>> a
[123, 123, 123, 123, 123]
但是你将创建另一个列表并将其绑定到相同的名称。
答案 2 :(得分:1)
for a in _list_:
_list_[_list_.index(a)]=123