Python 3.x 需要帮助理解嵌套for循环的代码执行吗

Python 3.x 需要帮助理解嵌套for循环的代码执行吗,python-3.x,Python 3.x,我很难理解以下代码的元素执行。目标是定义一个函数,返回两个集合的笛卡尔积。应该使用下面代码中的方法来解决这个问题 我曾尝试查找类似的问题,但由于我不熟悉编程和python,所以很容易陷入困境 A = {1,2,3,4} B = {3,4,5} def setprod(m1,m2): p=集合() 对于m1中的e1: 对于e2,单位为m2: p、 添加((e1,e2)) 返回p setprod(A,B)返回{(1,3)、(3,3)、(4,5)、(4,4)、(1,4)、(1,5)、(2,3)、(

我很难理解以下代码的元素执行。目标是定义一个函数,返回两个集合的笛卡尔积。应该使用下面代码中的方法来解决这个问题

我曾尝试查找类似的问题,但由于我不熟悉编程和python,所以很容易陷入困境

A = {1,2,3,4}
B = {3,4,5}
def setprod(m1,m2):
p=集合()
对于m1中的e1:
对于e2,单位为m2:
p、 添加((e1,e2))
返回p
setprod(A,B)
返回
{(1,3)、(3,3)、(4,5)、(4,4)、(1,4)、(1,5)、(2,3)、(4,3)、(2,5)、(3,4)、(2,4)、(3,5)}
笛卡尔积是包含两个集合中所有有序元素对的集合。A中的元素可以选择4种不同的方式,B 3给出4x3=12种组合


我就是不明白上面的代码为什么能做到这一点。

如果你可以访问调试工具(也许你可以安装pycharm并使用它的调试器),你可以看到发生了什么

让我们一起从思想上逐步了解代码中发生的事情

A = {1,2,3,4}              #Step 1, load a set (1,2,3,4)
B = {3,4,5}                #Step 2, load a set (3,4,5)
def setprod(m1,m2):        #Step 4, define the function
    p=set()
    for e1 in m1:
        for e2 in m2:
            p.add((e1,e2))
    return p
setprod(A,B)               #Step 5, execute function with parameters
在这一点上,如果我们想看看setprod是什么,我们进入函数

    p=set()                #Steppedin, step 1 create empty set
    for e1 in m1:          #Steppedin, step 2, begin forloop iterating through m1, 
                           #which contains (1,2,3,4); e1 is set to 1

        for e2 in m2:      #Steppedin, step 3 begin inner for loop 
                           #iterating through m2, which contains (3,4,5), 
                           #e2 is set to 3, e1 contains the value 1

            p.add((e1,e2)) #Stepped in, step 4.  add (m1[0],m2[0]), represented by 
                           # (e1,e2) to the set.
    return p
在步骤4中的步骤中,下一步是相同的代码行,但具有不同的寄存器值,e2不再是m2[0],而是m2[1]

            p.add((e1,e2)) #Stepped in, step 5.  add (m1[0],m2[1]), represented by 
                           # (e1,e2) to the set where e1 = 1 and e2 = 4

此时,我们返回到父for循环

    for e1 in m1:          #Stepped in, step 7.
                           #use m1[1] as e1 and repeat previous process but 
                           #with the new e1 value set to 2

        for e2 in m2:      #Stepped in, step 8.  e1 contains 2, e2 is set to 3
            p.add((e1,e2))

(请注意,如果您正在调试它,我相信您只有在代码p.add的部分才能看到e2和e1的值,说e1在#stepped in,step 7设置为某个值,这并不完全准确,但足以帮助您了解正在发生的事情。)

如果您可以访问调试工具(也许你可以安装pycharm并使用它的调试器)你可以看到发生了什么

让我们一起从思想上逐步了解代码中发生的事情

A = {1,2,3,4}              #Step 1, load a set (1,2,3,4)
B = {3,4,5}                #Step 2, load a set (3,4,5)
def setprod(m1,m2):        #Step 4, define the function
    p=set()
    for e1 in m1:
        for e2 in m2:
            p.add((e1,e2))
    return p
setprod(A,B)               #Step 5, execute function with parameters
在这一点上,如果我们想看看setprod是什么,我们进入函数

    p=set()                #Steppedin, step 1 create empty set
    for e1 in m1:          #Steppedin, step 2, begin forloop iterating through m1, 
                           #which contains (1,2,3,4); e1 is set to 1

        for e2 in m2:      #Steppedin, step 3 begin inner for loop 
                           #iterating through m2, which contains (3,4,5), 
                           #e2 is set to 3, e1 contains the value 1

            p.add((e1,e2)) #Stepped in, step 4.  add (m1[0],m2[0]), represented by 
                           # (e1,e2) to the set.
    return p
在步骤4中的步骤中,下一步是相同的代码行,但具有不同的寄存器值,e2不再是m2[0],而是m2[1]

            p.add((e1,e2)) #Stepped in, step 5.  add (m1[0],m2[1]), represented by 
                           # (e1,e2) to the set where e1 = 1 and e2 = 4

此时,我们返回到父for循环

    for e1 in m1:          #Stepped in, step 7.
                           #use m1[1] as e1 and repeat previous process but 
                           #with the new e1 value set to 2

        for e2 in m2:      #Stepped in, step 8.  e1 contains 2, e2 is set to 3
            p.add((e1,e2))

(请注意,如果您正在调试此程序,我相信您只有在代码p.add的部分才能看到e2和e1的值,说e1在#stepped in,step 7设置为某个值,这并不完全准确,但足以帮助您了解正在发生的情况。)

什么让您感到困惑?第一个循环迭代
A
(下一个项目在
e1
)的元素,第二个循环对
B
(项目是
e2
)执行相同的操作。然后它添加
(e1,e2)
tuple到每次迭代的结果集。我建议您按照循环进行操作,并尝试使用笔和纸做与代码相同的事情。到底什么让您感到困惑?第一个循环迭代
a
的元素(下一项在
e1
中),第二个循环对
B
执行相同的操作(项目为
e2
)。然后添加
(e1,e2)
tuple到每次迭代中的结果集。我建议您遵循循环,并尝试使用笔和纸做与代码相同的事情。感谢您提供了一个非常有用的答案。我的问题是理解代码如何修复外部循环中的元素,并在将这些组合添加到新循环中时迭代内部的元素集合。这是我将手动执行的过程,结果证明您对代码的解释与它完全相同。感谢您提供了一个非常有用的答案,我的问题是理解代码如何修复外部循环中的元素,并在将这些组合添加到新集合时遍历内部循环中的元素。这是我将手动执行的过程,你对代码的解释和它是一样的。