【问题标题】:Python list comprehension changes initial variable [duplicate]Python列表理解更改初始变量[重复]
【发布时间】:2014-02-03 02:44:01
【问题描述】:

我注意到,当您对预先存在的列表运行列表推导时,该列表在处理后不会更改。

但是,如果理解中的本地名称相同,则为您的初始变量。

这是为什么?

例子:

>>> y=[1,2,3,4,5]

>>> [X**2 for X in y]
[1, 4, 9, 16, 25]
>>> y
[1, 2, 3, 4, 5]

>>> [y**2 for y in y]
[1, 4, 9, 16, 25]
>>> y
5

如您所见,在第二个示例中,y 已更改为整数 5

【问题讨论】:

  • 列表推导不会引入新的变量范围。如果您重复使用相同的变量名,它将用列表中的最后一个值覆盖该变量。

标签: python list python-2.7 list-comprehension


【解决方案1】:

您实际上是在重新绑定 y 以包含原始 y 的最后一个值。

这与以下内容没有什么不同:

In [18]: [x for x in range(5)]
Out[18]: [0, 1, 2, 3, 4]

In [19]: x
Out[19]: 4

除了您的代码将y 用于两个不同的事情,这混淆了问题。

【讨论】:

    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2016-11-04
    • 2012-09-29
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多