【问题标题】:Why is this list being printed out 3 times instead of one? Why is my nested for loop not working as expected?为什么这个列表打印了 3 次而不是 1 次?为什么我的嵌套 for 循环没有按预期工作?
【发布时间】:2021-12-25 23:49:06
【问题描述】:

我有一个二维数组,我试图在其中迭代并打印每个元素。 Python 中的 for 循环很烦人/令人困惑,因为您没有 C++ 中那样的可表达性,无法设置条件/增量。

无论如何,当我尝试打印出这个数组的内容时,它会打印出数组的内容 3 次而不是一次。

twoDarray = [[10, 15, 20], [25, 30, 35], [45, 50, 60]]
for i in twoDarray:
    for num in twoDarray:
        print(num)

为什么我的嵌套 for 循环没有按预期工作?

【问题讨论】:

  • 您在内部循环中再次循环整个数组,而不是循环遍历行。
  • 试试for num in twoDarray: --> for num in i:
  • 但是python中的循环变量没有任何意义,对吧?我可以随心所欲地调用这两个循环变量。在 c++ 中,您必须像 int i =0int j=0 一样定义它们。为什么我调用第二个 for 循环变量 num 有什么关系?还有一个大问题:为什么我要使用num 变量并使用它来遍历i?我很困惑
  • 用你自己的话说:当你做for i in twoDarray:时,你认为i第一次通过循环的值是多少?第二次?第三?为什么?当您尝试使用调试器或print 语句来测试它时,它是否按预期工作?你在哪里有for num in twoDarray:,同样的问题。现在:第一次通过内循环时,num 的值应该是多少?你期望这个价值来自哪里?因此,根据您对for 循环工作原理的理解,您应该如何编写循环?特别是,in 之后应该做什么?
  • 所以在内部循环中,您有一个名为i 的“小列表”,并且您想要访问i 的各个元素。您编写 for 循环的方式与编写任何其他 for 循环的方式相同:通过决定为各个元素使用的名称(您之前选择了 num;让我们坚持下去)在左侧,指定元素从哪里来。因此:for num in i:.

标签: python


【解决方案1】:

您正在对同一个列表进行两次迭代。请注意,您的 in 变量在两个循环中都是 twoDarray

应该是这样的:

twoDarray = [[10, 15, 20], [25, 30, 35], [45, 50, 60]]
for line in twoDarray:
    for num in line:
        print(num)

【讨论】:

  • 为什么变量中的第二个是行?为什么我在内部循环中使用外部循环中的 in 变量 for in 变量?
  • "为什么变量中的第二个是行?"因为这个版本说for line in twoDarray:。 “为什么我要使用外部循环中的 in 变量作为内部循环中的 in 变量?”你像这样匹配line 的原因是因为外部循环使line 依次为每一行命名(通过从整体结构中获取这些值),并且在内部循环中,你想得到行中的值。
  • Python 的语法在这里的意思是正是它在英语中的意思,只是省略了一些单词作为简写。 for line in twoDarray: 确切的意思是“做以下事情,for 每件事,在下面的任务描述中将被称为line,即找到intwoDarray”。
【解决方案2】:

两个循环都在迭代同一个对象...

for i in twoDarray:
    for num in i:

【讨论】:

    【解决方案3】:

    这里 i 也在迭代 twoDarray,num 也在迭代 twoDarray。这意味着 i 值将是内部列表,而 num 值也将是内部列表。您必须在第二个循环中迭代内部列表。将for num in twoDarray 更改为for num in i。现在您的 num 值将成为内部列表的元素(您想要的输出)。你的代码:

    twoDarray = [[10, 15, 20], [25, 30, 35], [45, 50, 60]]
    for i in twoDarray:
        for num in i:
            print(num)
    

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多