python请问for循环嵌套执行顺序是怎样的?求大神指点!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python请问for循环嵌套执行顺序是怎样的?求大神指点!相关的知识,希望对你有一定的参考价值。

i=1时,j=(1,2),执行第一遍,1x1=1 1x2=2i=2时,j=(1,3),结果不是为“2x1=2 2x2=4 2x3=6”吗? 为什么2x1=2没有出现呢?
难道是因为和第一遍执行的1x2=2结果一样,然后程序就自动合成一个了?

i=1时,j=(1,2),执行第一遍,1x1=1 没有1x2=2,因为python的区间都是数学上的半开半闭区间[1,2),所以不包括2.

i=2时,j=(1,3),执行第二遍 2x1=2 2x2=4 没有2x3=6, 因为python的区间都是数学上的半开半闭区间[1,3),所以不包括3,下面同理.

为什么2x1=2没有出现呢?因为你的输出变量的顺序是j,i,print("×=\\t".format(j,i,i*j),end=''),而不是i,j,print("×=\\t".format(i,j,i*j),end='')

所以没有2x1=2只有1x2=2,不是自动合成一个了.另外,你的程序输出一行需要换行,需要加一句print().

完整的Python程序如下(改动的地方见注释)

for i in range(1,10):

 for j in range(1,i+1):

  print("×=\\t".format(i,j,i*j),end='')#这里输出顺序改成i,j

 print()#这里加一句

源代码(注意源代码的缩进)

参考技术A range(1,2)没有包括2,这是函数的内部规定,不包含上限
所以,你再思考一下
参考技术B for i in range(循环次数):
要循环的内容

python中嵌套循环的执行顺序[重复]

【中文标题】python中嵌套循环的执行顺序[重复]【英文标题】:Order of execution in nested loops in python [duplicate] 【发布时间】:2019-09-25 20:21:58 【问题描述】:

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

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]

但是在 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: [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 语句后代码表现如何?

【问题讨论】:

假设我是 6 好,你会检查 2,3,4,5,如果你把 else 放在里面,它会给出 0,0,2,1 作为 mod 值,每次都会追加当它不是 0 时,4,5 它将添加到主要列表中!如果 i%j 不为 0,则更改要添加的条件,然后添加它,否则什么也不做 在第一个示例中,else 语句属于内部 for 循环。在这种情况下,在内部 for 循环完成对范围 (2,i) 的迭代后,i 将附加到 prime_list。在第二种情况下,else 语句属于 if 语句。在这种情况下,每次i%j != 0 时,i 都会附加到 prime_list 【参考方案1】:

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

在第二种情况下,else 用于:if 语句。意思是:如果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

【讨论】:

【参考方案2】:

因为移入时,它会循环,并且大多数情况下会退出第一个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)

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于python请问for循环嵌套执行顺序是怎样的?求大神指点!的主要内容,如果未能解决你的问题,请参考以下文章

请问Python中for循环不执行什么情况呢?

两个嵌套for循环的执行顺序

for循环执行顺序

一文了解Python中的循环(for while break continue 嵌套循环...)

两个for循环执行顺序

如何在一个循环执行ajax方法里面嵌套的ajax方法