这个 python for 循环在列表中有一个循环是如何工作的?

how does this python for loop with a loop inside the list work?

谁能解释一下这个循环是如何工作的?

test = ['x' for i in range(9)]
for row in [test[i*3: (i+1)*3] for i in range(3)]:
    print('1 ' + ' 2 '.join(row) + ' 3')

我认为输出是:

1  2 x 3
1  2 x 3
1  2 x 3

我无法理解它如何在 1 和 2 之间插入 'x'。

让我们一步步来。

  1. test = ['x' for i in range(9)]test 这是一个包含 9 'x's

    的列表
  2. [test[i*3: (i+1)*3] for i in range(3)]。让我们将此列表称为 temp_list。此列表理解采用 test 列表的一部分。对于 i 等于 0,切片将为 test[0: 3],等于 ['x', 'x', 'x']。对于 i 等于 1,切片将为 test[3: 6] 但包含与以前相同的值。

  3. 现在 for row in ...。这将遍历我们指定的 temp_list 以更好地表示。所以这个循环会迭代3次,每次row都会是['x', 'x', 'x']。所以print(..)会重复3次

  4. print('1 ' + ' 2 '.join(row) + ' 3')str.join() 实际上将可迭代对象(这里是一个名为 row 的列表)的每个元素与 str(这里是“2”)连接起来,作为它们之间的分隔符。因此,这里的 ' 2 'join(row) 将产生输出 x 2 x 2 x,最后 print() 将输出 1 x 2 x 2 x 3.

因此最终输出将是 -

1 x 2 x 2 x 3
1 x 2 x 2 x 3
1 x 2 x 2 x 3

好吧,打印第一行你会在一个列表中看到九个 x,所以我们正在生成一个列表

test = ['x' for i in range(9)]
print(test)

输出:

['x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x']

接下来:您可以简单地用两个循环编写它,在第一个循环中最多循环 3 次。让我们再次打印以了解。

for i in range(3):
  print(test[i*3: (i+1)*3])

输出:

['x', 'x', 'x']

['x', 'x', 'x']

['x', 'x', 'x']

正如您从该输出中看到的那样,我们得到了三行,每行具有三个 x 数。

然后,可以像这样循环打印不同的东西:

for i in range(3):
  for row in [test[i*3: (i+1)*3]]:
    print('1 ' + ' 2 '.join(row) + ' 3')

输出:

1 x 2 x 2 x 3

1 x 2 x 2 x 3

1 x 2 x 2 x 3

我希望它现在有意义!如果您需要其他任何具体解释,请告诉我?