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

时间:2011-06-30 00:38:45

标签: python

问题: 当你使用建筑

for a in _list_:
    print a

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

在PHP中就像

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

(因为&符号,作为参考传递)

3 个答案:

答案 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