Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用python解释这个循环结果?_Python_Loops - Fatal编程技术网

如何用python解释这个循环结果?

如何用python解释这个循环结果?,python,loops,Python,Loops,有人能解释为什么第二个循环的结果是这样的吗 我对Python中多个内联循环是如何工作的感到非常困惑 此外,任何关于python内嵌循环的教程都是受欢迎的第二种构造本身不是有效的代码: 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 ]

有人能解释为什么第二个循环的结果是这样的吗

我对Python中多个内联循环是如何工作的感到非常困惑


此外,任何关于python内嵌循环的教程都是受欢迎的

第二种构造本身不是有效的代码:

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)]
[1]中的
:x=范围(1,4)
[2]中:y=范围(1,4)
〔3〕中[(席,易),X为席,若席为彝易
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
/home/aix/in()
名称错误:未定义名称“yi”
xi中的
yi
是yi
并不是指其后的
yi
。它指的是一个预先存在的变量,名为
yi
(至少在第一次迭代中就是这样)


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

第二个构造本身不是有效的代码:

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)]
[1]中的
:x=范围(1,4)
[2]中:y=范围(1,4)
〔3〕中[(席,易),X为席,若席为彝易
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
/home/aix/in()
名称错误:未定义名称“yi”
xi中的
yi
是yi
并不是指其后的
yi
。它指的是一个预先存在的变量,名为
yi
(至少在第一次迭代中就是这样)


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

这里是重点,当我操作此操作时,第二个循环在第一个循环之后运行

易在局部范围内实际上是3


如果单独运行,第二个循环将产生错误。

这里是要点,当我操作此操作时,第二个循环在第一个循环之后运行

易在局部范围内实际上是3


如果单独运行,第二个将产生错误。

当您达到这种复杂程度时,我可能不会使用列表comp。常规循环可能更具可读性。另外,您不应该像那样使用
is
<代码>is检查对象相等,而不是值相等。不要使用
is
来比较数字。使用
==
。我看到了答案。这里是要点,第二个循环在第一个循环之后运行。易在局部范围内实际上是3。如果单独运行它们,第二个将引发错误。当您达到这种复杂程度时,我可能不会为此使用列表comp。常规循环可能更具可读性。另外,您不应该像那样使用
is
<代码>is检查对象相等,而不是值相等。不要使用
is
来比较数字。使用
==
。我看到了答案。这里是要点,第二个循环在第一个循环之后运行。易在局部范围内实际上是3。如果单独运行它们,第二个将引发错误。