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

0 投票
3 回答
1058 浏览
提问于 2025-04-18 10:39

在使用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

我不太确定我是否完全理解你的问题,但我会试着解释一下。你并没有改变 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,将其设置为一个空列表,然后将新列表的内容添加到这个空列表中)。

列表推导式:

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

或者使用 for 循环:

myNewList = []
for x in myList:
    myNewList.append(x**2)
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

x 在每次循环的时候都是一个不同的变量。它是不可变的,所以你对它所做的任何修改在原来的列表中是看不见的。如果你想改变列表中某个元素的值,你需要这样做:

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

撰写回答