如果我存储嵌套for循环的输出,则只打印循环的最后元素,但print函数打印所有组合


l1 = ['a','b']
l2 = ['c','d']
for x in l1:
for y in l2:
(a,b)=(x,y)

当我print(a,b)时,我得到的只是('b','d'),但当我输入类似的代码时

for x in l1:
for y in l2:
print((x,y))

打印CCD_ 3和CCD_。为什么会发生这种情况,我该如何处理?

以下代码将为您提供所有可能的组合

l1 = ['a','b']
l2 = ['c','d']
for x in l1:
for y in l2:
(a, b) = (x, y)
print(a, b)

此外,看看的替代解决方案

from itertools import product

l1 = ['a','b']
l2 = ['c','d']
for (a, b) in product(l1, l2):
print(a, b)

执行(a,b)=(x,y)时,会将a的值设置为等于x的值,将b的值设置成等于y的值。每次运行for循环时,ab都会被淹没。另一方面,print语句只是将这两个变量当时的值写入stdout。如果您想存储这些值以便在for循环之后使用,我建议将它们附加到列表中。

l1 = ['a','b']
l2 = ['c','d']
combinations = []
for x in l1:
for y in l2:
combinations.append((x, y))

或者,就像Roman Dryndik的回答一样,你可以使用product函数。

简单的答案是,当您执行时

l1 = ['a','b']
l2 = ['c','d']
for x in l1:
for y in l2:
(a,b)=(x,y)

我假设您在for循环之外调用print函数(在粘贴的代码中没有显示在哪里调用它(。在您的代码中,a和b的值在每次迭代中都会被重新分配,所以当您在for循环之后调用它时,它只会打印a和b最后被分配给的内容。

当你这样做的时候:

l1 = ['a','b']
l2 = ['c','d']
for (a, b) in product(l1, l2):
print(a, b)

您在for循环中调用了print函数。这意味着它在每次迭代中都会达到,因此它将在每次迭代期间打印a和b的值是有意义的。

最新更新