Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Python 3.x_Nested Loops - Fatal编程技术网

python中嵌套循环的执行顺序

python中嵌套循环的执行顺序,python,python-3.x,nested-loops,Python,Python 3.x,Nested Loops,我无法理解这两个代码块之间的区别,首先正确的代码块是: number_list=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] prime_list=[] for i in number_list: for j in range(2,i): if i%j==0: break else: prime_list.append(i) print('Primes are:',prime_list) 输出为:

我无法理解这两个代码块之间的区别,首先正确的代码块是:

number_list=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
prime_list=[]
for i in number_list:
    for j in range(2,i):
        if i%j==0:
            break
    else: prime_list.append(i)
print('Primes are:',prime_list)
输出为:

Primes are: [1, 2, 3, 5, 7, 11, 13]
Primes are: [3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13]
但是在if语句下面的块中向前移动else语句(我认为这是正确的做法)会导致不同的错误输出:

number_list=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
prime_list=[]
for i in number_list:
    for j in range(2,i):
        if i%j==0:
            break
        else: prime_list.append(i)
print('Primes are:',prime_list)
输出为:

Primes are: [1, 2, 3, 5, 7, 11, 13]
Primes are: [3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13]

为什么会这样?代码在else语句缩进时的行为如何?

不同范围内的else具有不同的含义:

  • 与for循环范围相同的else是else条件。它将在不中断for循环时执行
  • 在第二种情况下,for循环中的else用于退出for循环。else与if语句相关

  • 不同范围内的else有不同的含义:

  • 与for循环范围相同的else是else条件。它将在不中断for循环时执行
  • 在第二种情况下,for循环中的else用于退出for循环。else与if语句相关

  • 因为当移入时,它将循环,并且大多数情况下退出第一个
    if
    语句,然后因为
    else
    表示要添加值,它将继续添加到它

    还有其他方法可以更有效地做到这一点,如下所示:

    prime_list=[i for i in number_list if all(i % x for x in range(2, i))][1:]
    print('Primes are:',prime_list)
    

    因为当移入时,它将循环,并且大多数情况下退出第一个
    if
    语句,然后因为
    else
    表示要添加值,它将继续添加到它

    还有其他方法可以更有效地做到这一点,如下所示:

    prime_list=[i for i in number_list if all(i % x for x in range(2, i))][1:]
    print('Primes are:',prime_list)
    

    在第一个示例中,
    else
    用于:
    for
    循环。这意味着
    else
    语句中的代码只有在
    for循环
    结束而没有
    break
    时才会执行。 因此,在您的情况下,范围
    (2,i)
    中的任何数字都不是
    i
    的除法器

    在第二种情况下,
    else
    用于:
    if
    语句。这意味着:如果
    如果
    为非真,则执行
    else
    语句。在这个场景中,让我们假设
    i=5
    。用于:

    j = 2 => i%j = 1 => else statement is executed:  prime_list.append(5)
    j = 3 => i%j = 2 => else statement is executed:  prime_list.append(5)
    j = 4 => i%j = 1 => else statement is executed:  prime_list.append(5)
    

    这就是为什么您的列表中有3次
    5次

    在第一个示例中,
    else
    用于:
    for
    循环。这意味着
    else
    语句中的代码只有在
    for循环
    结束而没有
    break
    时才会执行。 因此,在您的情况下,范围
    (2,i)
    中的任何数字都不是
    i
    的除法器

    在第二种情况下,
    else
    用于:
    if
    语句。这意味着:如果
    如果
    为非真,则执行
    else
    语句。在这个场景中,让我们假设
    i=5
    。用于:

    j = 2 => i%j = 1 => else statement is executed:  prime_list.append(5)
    j = 3 => i%j = 2 => else statement is executed:  prime_list.append(5)
    j = 4 => i%j = 1 => else statement is executed:  prime_list.append(5)
    

    这就是为什么你的列表中有3次
    5

    假设我是6 ok,你将检查2,3,4,5,它将给出0,0,2,1作为mod值,如果你在其中放入else,它将在每次不为0时追加,因此对于4,5,它将添加到基本列表中!!更改附加do it的条件如果i%j不是0,则添加else do Nothing在第一个示例中,else语句属于内部for循环。在这种情况下,
    i
    在内部for循环完成对范围
    (2,i)
    的迭代后被附加到
    prime\u列表中。在第二种情况下,else语句属于if语句。在这种情况下,每次
    i%j!=0
    。假设我是6 ok,您将检查2,3,4,5,现在它将给出0,0,2,1作为mod值,如果您将else放入其中,它将在每次不为0时追加,因此对于4,5,它将添加到基本列表中!!更改附加do it的条件如果i%j不是0,则添加else do Nothing在第一个示例中,else语句属于内部for循环。在这种情况下,
    i
    在内部for循环完成对范围
    (2,i)
    的迭代后被附加到
    prime\u列表中。在第二种情况下,else语句属于if语句。在这种情况下,每次
    i%j!=0