Pythonic引用的循环

时间:2011-08-26 16:40:45

标签: python

我有一个for循环如下:

a=[1,2,3,4,5]
for i in a:
    i=6

我希望a的每个元素成为6

现在我知道这个for循环不会这样做,因为我只是改变了i所指的内容。

我可以写:

a=[1,2,3,4,5]
for i in len(range(a)):
    a[i]=6

但这似乎不是Pythonic。做这种事情的好方法是什么?显然,将所有内容设置为6是一个人为的例子,实际上,我会做更复杂(和精彩)的事情。因此,答案应该概括。

3 个答案:

答案 0 :(得分:2)

for - 变量始终是一个简单的值,而不是引用;没有办法知道它来自列表,因此在更改时写回列表。

虽然您需要len(a)(或range),但xrange方法通常是惯用法:

for i in range(len(a)):

或者,通常使用enumerate函数来获取索引和值:

for i, v in enumerate(a):
    a[i]= v+1

列表理解可能是一个很好的选择,例如:

a= [6 for v in a]

答案 1 :(得分:1)

这可能是map()的一个很好的用途,取决于你在现实生活中所做的事情。例如:

a = map(lambda x: 6, a)

答案 2 :(得分:1)

您可以使用:

>>> a = [1, 2, 3, 4, 5]
>>> a = [6] * len(a)
>>> a
[6, 6, 6, 6, 6]