【问题标题】:fors in python list comprehensionpython列表理解中的fors
【发布时间】:2017-02-17 10:52:42
【问题描述】:

假设我在 python 列表理解中嵌套了 for 循环

>>> data = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> [y for x in data for y in x]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> [y for y in x for x in data]
[6, 6, 6, 7, 7, 7, 8, 8, 8]

我无法解释为什么当我更改两个fors 的顺序时

for y in x

第二个列表理解中的x 是什么?

【问题讨论】:

  • 也许值得指出的是,这种差异不会发生在ipython 终端中。任何想法为什么?

标签: python list python-2.7 for-loop list-comprehension


【解决方案1】:

它保存了先前理解的值。尝试反转它们,你会得到一个错误

>>> data = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> [y for y in x for x in data]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

要进一步测试,请打印x 并查看

>>> [y for x in data for y in x]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> x
[6, 7, 8]
>>> [y for y in x for x in data]
[6, 6, 6, 7, 7, 7, 8, 8, 8]

【讨论】:

  • 哦,我明白了! [y for y in x for x in data] 所以嵌套的 x 不会改变外部 x 的值,换句话说,for x in data 不起作用。我对吗?但是结果不会是[6,7,8]吗?
  • @MMMMMCCLXXVII 我不确定我是否跟随。列表推导不提供新的范围。见this
【解决方案2】:

列表推导如下:

[y for x in data for y in x]
[y for y in x for x in data]

[y for y in x for x in data]for 循环转换为:

for y in x:
    for x in data:
        y

这里x 持有您之前的列表理解的x 的最后更新值,即:

[6, 7, 8]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多