x=range(1,4)
y=range(1,4)
[(xi,yi) for xi in x for yi in y if xi is yi]
#output
# [(1, 1), (2, 2), (3, 3)]
[(xi,yi) for xi in x if xi is yi for yi in y ]
#output, I am confused about this one
#[(3, 1), (3, 2), (3, 3)]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么第二个循环会像这样结果吗?
关于多个内联循环在Python中如何工作,我感到很困惑.
此外,任何关于python内联循环的教程都是受欢迎的
第二个结构本身不是有效的代码:
In [1]: x=range(1,4)
In [2]: y=range(1,4)
In [3]: [(xi,yi) for xi in x if xi is yi for yi in y ]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/home/aix/<ipython console> in <module>()
NameError: name 'yi' is not defined
Run Code Online (Sandbox Code Playgroud)
将yi在xi is yi不指yi自带之后.它指的是一个预先存在的变量yi(至少是在第一次迭代期间发生的变量).
代码为您工作的唯一原因是您以前运行过第一个构造并且在全局名称空间中留下了yi(设置为3).