Python中的Foreach无法按预期工作

时间:2015-04-23 15:38:34

标签: python for-loop foreach

我想切换列表的每个第二个元素:

[False, False, False, False, False]

但它不起作用。

for i in range(0, len(s), 2):
    s[i] = not s[i]

print(s)

[True, False, True, False, True]

然而,这可以按预期工作:

showmount -e <nfs_server_ip_address>

为什么会这样?

3 个答案:

答案 0 :(得分:4)

因为你做的时候

item = not item

您实际要做的是使用对数组外部对象的另一个引用来更改对数组中对象的引用。 item只是对数组内对象的引用的副本。

第二个代码按预期工作,因为它更改了数组本身的引用,而不是参考副本。

答案 1 :(得分:1)

这些行:

for item in s[::2]:
    item = not item

等同于:

for i in range(0, len(s), 2):
    item = s[i]
    item = not item

答案 2 :(得分:0)

在第一种情况下,您将分配给循环期间创建的变量。在第二个中,您将分配给数组中的索引。循环的每次迭代都将重置变量item