Python中如何避免嵌套for循环笛卡尔积实现对应元素配对输出?
如何将两个序列的对应元素配对输出?
你用嵌套循环得到笛卡尔积,是因为嵌套循环会在遍历第一个序列的每个元素时,完整遍历第二个序列的所有元素,从而生成所有可能的组合。要实现对应位置元素配对输出,直接用Python内置的zip()函数即可。
解决方案代码
value1 = ['A', 'B', 'C'] value2 = ['A', 'B', 'C'] # 用zip同时遍历两个序列的对应元素 for row1, row2 in zip(value1, value2): print(row1, row2)
执行结果
A A B B C C
原理说明
zip()函数会将多个可迭代对象(比如这里的value1和value2)中相同位置的元素打包成元组,返回一个迭代器。循环时可以同时取出两个序列对应位置的元素,完美避开嵌套循环产生的笛卡尔积问题。
如果两个序列长度不一致,zip()会自动以较短的序列长度为准截断。如果需要保留所有元素(长度不足的位置用默认值填充),可以使用itertools.zip_longest(),不过你的场景中两个序列长度相同,用zip()就足够了。
原代码及问题现象
单独遍历第一个序列
for row1 in value1: print(row1)
执行结果:
A B C
单独遍历第二个序列
for row2 in value2: print(row2)
执行结果:
A B C
尝试的嵌套循环(得到笛卡尔积)
for row1 in value1: for row2 in value2: print(row1, row2)
得到的结果:
A A A B A C B A B B B C C A C B C C
内容的提问来源于stack exchange,提问作者Jim Macaulay
相关产品推荐
相关产品推荐

