【问题标题】:Foreach in Python not working as expectedPython 中的 Foreach 无法按预期工作
【发布时间】:2015-04-23 15:38:34
【问题描述】:

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

s = [False] * 5

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

print(s)

但它不起作用。

[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]

为什么会这样?

【问题讨论】:

  • 因为item 是一个不同于list[i] 的变量,它恰好包含相同的内容(因为for 循环分配给item)。分配给item 不会改变list

标签: python for-loop foreach


【解决方案1】:

因为当你这样做时

item = not item

您实际上所做的是将对数组中对象的引用更改为对数组外对象的另一个引用。 item 只是对数组内对象的引用的副本。

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

【讨论】:

    【解决方案2】:

    这些行:

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

    等价于:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        相关资源
        最近更新 更多