我需要构建一个接受2个元组的函数,并将它们与所有可能的对配对。
例如,我需要带元组:
first_tuple = (1, 2)
second_tuple = (4, 5)
Run Code Online (Sandbox Code Playgroud)
结果必须是:
((1, 4), (4, 1), (1, 5), (5, 1), (2, 4), (4, 2), (2, 5), (5, 2))
Run Code Online (Sandbox Code Playgroud)
您可以使用itertools.product和itertools.chain,其想法是接受所有可能的产品订购,并且由于元组的大小为2,因此只需要翻转它们即可:
>>> from itertools import product, chain
>>> first_tuple = (1, 2)
>>> second_tuple = (4, 5)
>>> half = list(product(first_tuple, second_tuple))
>>> half
[(1, 4), (1, 5), (2, 4), (2, 5)]
>>> list(chain(half, map(lambda x: (x[1], x[0]), half)))
[(1, 4), (1, 5), (2, 4), (2, 5), (4, 1), (5, 1), (4, 2), (5, 2)]
Run Code Online (Sandbox Code Playgroud)
对于任意的元组大小,您可以使用(@ Aran-Fei思想):
[perm for tup in half for perm in itertools.permutations(tup)]
Run Code Online (Sandbox Code Playgroud)