使用Python的
但它没有按照我的意图执行。预期输出为:
itertools
,我想创建一个迭代器,用于所有列表排列的外积。以下是一个明确的示例:import itertools
A = [1,2,3]
B = [4,5]
C = [6,7]
for x in itertools.product(itertools.permutations(A),itertools.permutations(B),itertools.permutations(C)):
print x
尽管这个方法可行,但我希望将其推广到任意列表的列表中。我尝试过:
for x in itertools.product(map(itertools.permutations,[A,B,C])):
print x
但它没有按照我的意图执行。预期输出为:
((1, 2, 3), (4, 5), (6, 7))
((1, 2, 3), (4, 5), (7, 6))
((1, 2, 3), (5, 4), (6, 7))
((1, 2, 3), (5, 4), (7, 6))
((1, 3, 2), (4, 5), (6, 7))
((1, 3, 2), (4, 5), (7, 6))
((1, 3, 2), (5, 4), (6, 7))
((1, 3, 2), (5, 4), (7, 6))
((2, 1, 3), (4, 5), (6, 7))
((2, 1, 3), (4, 5), (7, 6))
((2, 1, 3), (5, 4), (6, 7))
((2, 1, 3), (5, 4), (7, 6))
((2, 3, 1), (4, 5), (6, 7))
((2, 3, 1), (4, 5), (7, 6))
((2, 3, 1), (5, 4), (6, 7))
((2, 3, 1), (5, 4), (7, 6))
((3, 1, 2), (4, 5), (6, 7))
((3, 1, 2), (4, 5), (7, 6))
((3, 1, 2), (5, 4), (6, 7))
((3, 1, 2), (5, 4), (7, 6))
((3, 2, 1), (4, 5), (6, 7))
((3, 2, 1), (4, 5), (7, 6))
((3, 2, 1), (5, 4), (6, 7))
((3, 2, 1), (5, 4), (7, 6))
N!
在存储在内存中时会变成一个巨大的数字。 - HookedA=range(13)
,B
和C
同理。虽然这个迭代器中有 13!**3 个元素,但我们应该能够遍历它们(这就是迭代器的全部意义,对吧?)。但在列出任何一个元素之前,内存使用量就会爆炸。你试试看 - 你没有同样的效果吗? - Hookedproduct
需要在使用之前将你的迭代器转换为列表,因为它们需要被循环多次(而迭代器只能使用一次)。 - JBernardo