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


谁能解释为什么第二个循环如此产生?

我对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


yi中的xi is yi并不是指之后的yi。它指的是一个预先存在的变量,称为yi(至少在第一次迭代中就是这样)。

该代码对您有用的唯一原因是您以前运行了第一个构造,并且在全局命名空间中留了yi(设置为3)。

关于python - 如何在python中解释此循环结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7470988/

10-09 01:52