如何在for循环中更改x的值?

时间:2014-06-22 03:52:44

标签: python for-loop

使用for循环,在迭代列表时,是否可以更改x的值? 例如,

>>> myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for x in myList:
...     print x

如果我改变x的值,那么它将在当前迭代中产生影响,但在下一个迭代中不起作用。使用上面的代码,如果添加了以下代码,

...     x += 1
...     print x

然后它会打印出来:

0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10

为什么x的值能够被改变,但是一旦被循环本身改变就失去它的变化。还有,可以解决这个问题吗? 感谢

3 个答案:

答案 0 :(得分:2)

x是每个循环迭代的不同变量。它也是不可变的,因此从原始列表中可以看到您对其所做的任何更改。如果要更改列表中元素的值,则必须执行以下操作:

>>> myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i,_ in enumerate(myList):
...     myList[i] += 1
...     print myList[i]

答案 1 :(得分:1)

[x+1 for x in some_list]

这是列表推导的内容......

当你这样做时

for x in some_list:
    x += 1 #this only changes the local x
    #it does not change the value in the list

如果要替换列表中的值,可以执行

some_list[:] = [x+1 for x in some_list]

^这将修改列表的现有内存

some_list = [x+1 for x in some_list]

将使用新列表覆盖变量some_list,并且垃圾收集旧的(通常非常直接)

答案 2 :(得分:0)

我不知道我是否理解你的问题,但我会对此表示理解。您没有更改myList的值。您只是更改了x的值。 for循环的“变量”(在本例中为x)只是一种访问迭代中每个 的方法(在这种情况下为myList )。换句话说,x是一个“变量”,代表每个新项目“逐步”myList。因此,x“弹出和不存在”如果你愿意,而myList在其原始内存位置保持不变。

如果您想更改原始列表,那么您需要按照Joran Beasley的说法进行操作。

引用您的整个列表(请注意,他通过使用[:]将整个列表编入索引来“抓取”整个列表。

myList[:] = [x+1 for x in myList] #now you've changed the value of myList in the memory location where it was originally created and still "lives"

如果要完全创建不同的列表,则可以创建一个新变量并将其设置为等于列表推导(或使用for loop,将其设置为等于附加到的空列表你的新名单的内容。)

list comp:

myNewList = [x**2 for x in myList]

或for loop:

myNewList = []
for x in myList:
    myNewList.append(x**2)