Python相当于php的foreach($ array as $ key =>& $ value)

时间:2011-05-01 22:01:34

标签: python for-loop

是否有任何等效的PHP表示法,它会更改原始数组(注意引用运算符)?

// increase value of all items by 1
foreach ($array as $k => &$v) {
    $v++;
}

我只知道这种方式,这不是那么优雅:

for i in range(len(array)):
    array[i] += 1 

4 个答案:

答案 0 :(得分:50)

当在列表上调用内置的enumerate()函数时,它返回一个可以迭代的对象,返回一个count和从列表返回的值。

for i, val in enumerate(array):
    array[i] += 1

答案 1 :(得分:5)

您可以使用list comprehension

newArray = [i + 1 for i in array]

答案 2 :(得分:2)

关于参考文献。

在python中,每个值都是对象,每个“变量”都是对象的引用。赋值永远不会复制值,它总是指定引用。

默认情况下,for k,v in enumerate([1,2,3])中的v也是引用。但是,大多数基本“类型”的对象都是不可变的,因此当您执行immutable_object_reference += 1时,您需要创建int的新实例,并将immutable_object_reference更改为指向新实例。

当我们的值是可变类型时,引用与PHP中的相同:

>>> class mutable_pseudoint(object):
...     def __init__(self, d):
...         self.d = d
...     def __iadd__(self, v):
...         self.d += v
...     def __repr__(self):
...         return self.d.__repr__()
...     def __str__(self):
...         return self.d.__str__()
... 
>>> l = [mutable_pseudoint(1), mutable_pseudoint(2), mutable_pseudoint(3), mutable_pseudoint(4)]
>>> l
[1, 2, 3, 4]
>>> for k,v in enumerate(l):
...     v += 1
... 
>>> l
[2, 3, 4, 5]

答案 3 :(得分:1)

我不知道能够获得指向列表项的指针,但http://effbot.org/zone/python-list.htm演示了一种更清晰的索引访问方式:

for index, object in enumerate(L):
    L[index] = object+1