For loop Tcl/tk:我应该使用for还是foreach?

For loop Tcl/tk:我应该使用for还是foreach?,for-loop,foreach,tcl,For Loop,Foreach,Tcl,我有三个列表,我想遍历它们,以便计算列表中变量的每个排列。我现在有一个for循环和两个嵌套的for循环,但是我想知道我是否可以用foreach实现同样的功能?然而,我不能完全理解foreach语法。可能是因为我不太清楚如何/何时使用foreach 这是我当前的代码块。是否可以将此作为foreach编写 当您在一个列表中进行迭代时,您可以使用foreach而不是for,并且您不需要索引,而是列表的元素本身。例如,您可以使用以下循环代替当前循环: foreach alpha $list1 {

我有三个列表,我想遍历它们,以便计算列表中变量的每个排列。我现在有一个for循环和两个嵌套的for循环,但是我想知道我是否可以用foreach实现同样的功能?然而,我不能完全理解foreach语法。可能是因为我不太清楚如何/何时使用foreach

这是我当前的代码块。是否可以将此作为foreach编写

当您在一个列表中进行迭代时,您可以使用foreach而不是for,并且您不需要索引,而是列表的元素本身。例如,您可以使用以下循环代替当前循环:

foreach alpha $list1 {
   foreach color $list2 {
      foreach animal $list3 {
         puts "$alpha $color $animal"
      }
   }
}
请一定要看一下这本书

在遍历列表时,可以使用foreach而不是for,并且不需要索引,而是列表元素本身。例如,您可以使用以下循环代替当前循环:

foreach alpha $list1 {
   foreach color $list2 {
      foreach animal $list3 {
         puts "$alpha $color $animal"
      }
   }
}

请看一看

foreach的另一件事是,当它运行时,不能更改它正在迭代的列表。您可以更改列表来自的变量,但不能更改列表值本身。大多数时候都可以,但并不总是这样;有时候你需要一段时间…谢谢Jerry Donal。我认为你不能改变它运行时迭代的列表,这回答了我的后续问题,有没有一种方法可以只使用一个foreach语句来编写我的原始代码?对于三个列表的笛卡尔乘积?不是真的。查看想法。有这样的表单:foreach alpha$list1 color$list2 animal$list3{put$alpha:$color:$animal}但这不是笛卡尔乘积,它在每次迭代中处理每个列表的第i个元素。这就像其他一些语言所说的zip。foreach的另一个特点是,当它运行时,您不能更改它正在迭代的列表。您可以更改列表来自的变量,但不能更改列表值本身。大多数时候都可以,但并不总是这样;有时候你需要一段时间…谢谢Jerry Donal。我认为你不能改变它运行时迭代的列表,这回答了我的后续问题,有没有一种方法可以只使用一个foreach语句来编写我的原始代码?对于三个列表的笛卡尔乘积?不是真的。查看想法。有这样的表单:foreach alpha$list1 color$list2 animal$list3{put$alpha:$color:$animal}但这不是笛卡尔乘积,它在每次迭代中处理每个列表的第i个元素。这就像其他一些语言所说的zip