总蟒蛇新秀在这里.我希望迭代三个列表,其中前两个应该以所有可能的方式重新组合,而只有一个值附加到第三个列表的每个组合.到目前为止,我得到了:
import itertools list1 = [1,2,3] list2 = [1,2,3] list3 = [1,2,3,4,5,6,7,8,9] for x, y, in itertools.product(list1, list2): print x, y, list3
返回:
1 1 [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 2 [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 3 [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 1 [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 2 [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 3 [1, 2, 3, 4, 5, 6, 7, 8, 9] 3 1 [1, 2, 3, 4, 5, 6, 7, 8, 9] 3 2 [1, 2, 3, 4, 5, 6, 7, 8, 9] 3 3 [1, 2, 3, 4, 5, 6, 7, 8, 9]
但是,我希望它返回以下内容:
1 1 1 1 2 2 1 3 3 2 1 4 2 2 5 2 3 6 3 1 7 3 2 8 3 3 9
我怎样才能得到这个结果?
通过并行迭代两个集合通常使用zip
以下方法完成:
import itertools list1 = [1,2,3] list2 = [1,2,3] list3 = [1,2,3,4,5,6,7,8,9] for (x, y), z in zip(itertools.product(list1, list2), list3): print x, y, z
结果:
1 1 1 1 2 2 1 3 3 2 1 4 2 2 5 2 3 6 3 1 7 3 2 8 3 3 9
或者,如果list3
总是[1,2,3 ......某些整数],你可以完全丢弃它并使用enumerate
.
import itertools list1 = [1,2,3] list2 = [1,2,3] for idx, (x, y) in enumerate(itertools.product(list1, list2), 1): print x, y, idx