【问题标题】:Getting different output for different positioning of my print statement in python 3在 python 3 中为我的打印语句的不同定位获取不同的输出
【发布时间】:2022-01-18 14:52:26
【问题描述】:

这是我写的普通代码,这段代码有我想要的输出

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i < 5:
        less5num.append(i)
        less5num.sort()
print(less5num)

Output
[1, 1, 2, 3, 4]

现在,如果我在 if 循环中继续打印,我会得到一个数字金字塔

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i<5:
        less5num.append(i)
        less5num.sort()
        print(less5num)

Output
[1]
[1, 1]
[1, 1, 2]
[1, 1, 2, 3]
[1, 1, 2, 3, 4]

如果我不打印 if 循环,我会得到一个递归数字金字塔

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i<5:
        less5num.append(i)
        less5num.sort()
    print(less5num)

Output
[1]
[1, 1]
[1, 1, 2]
[1, 1, 2, 3]
[1, 1, 2, 3]
[1, 1, 2, 3]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]

为什么会这样?

【问题讨论】:

    标签: python for-loop if-statement


    【解决方案1】:

    在你的第一个代码块中,打印不在for循环内,它在所有元素被迭代后执行,只有小于5的数字被添加到列表中并排序.

    在您的第二个代码块中,打印在loop 内,并且也只执行 if number is less than 5,所以只有更少的次数打印被执行。

    在您的第三个代码块中,您的打印位于for loop 中,但不在if 块中,因此当遇到每个元素时,都会发生打印,因此打印次数与中的数字一样多你的清单。

    【讨论】:

      【解决方案2】:
      a = [1,1,2,3,5,8,4,13,21,34,55,89]
      less5num = []
      for i in a:
          if i<5:
              less5num.append(i)
              less5num.sort()
          # this print in loop but outside if statement
          print(less5num)
      

      您的打印在循环中,但在 if 语句之外。这就是为什么所有迭代都在控制台中打印的原因

      【讨论】:

        【解决方案3】:

        如果print 在循环之外,它会打印一次列表,其中所有数字都小于 5。

        如果它在 if 内,则每次找到小于 5 的数字时打印一次列表。该列表处于中间创建阶段,因此会变得更大。

        如果它在循环内,则为循环中的每个数字打印一次。

        您可以使用pythontutor 将其可视化。

        【讨论】:

        • 感谢网站非常直观!!!!!!
        【解决方案4】:

        在第一个例子中:

        列表中有 5 个元素小于 5,因此您打印 5 次。

        [1,1,2,3,4]
        

        在第二个例子中:

        列表在列表中的所有值之后打印。由于列表中有 12 个元素,因此需要打印 12 次。

        [1,1,2,3,5,8,4,13,21,34,55,89]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-02
          • 2011-04-23
          • 2019-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多