任意数量集合的笛卡尔积
给定 N 个集合。任务是编写一个程序以给定顺序执行所有集合的笛卡尔积。
示例:
Input:
1st set: 1 2
2nd set: A
3rd set: x
4th set: 5 6
Output:
[['1', 'A', 'x', '5'],
['1', 'A', 'x', '6'],
['2', 'A', 'x', '5'],
['2', 'A', 'x', '6']]
Input:
1st set: 1 2
2nd set: A
3rd set: x y z
Output:
[['1', 'A', 'x'],
['1', 'A', 'y'],
['1', 'A', 'z'],
['2', 'A', 'x'],
['2', 'A', 'y'],
['2', 'A', 'z']]
方法:该方法是在开始时计算set-1和set-2的乘积,然后set-1和set-2的结果将与set-3有一个乘积,然后是set-1的结果,set -2,set-3 将具有与 set-4 的笛卡尔积,依此类推,直到 set-n。
下面是上述方法的实现。
Python3
# Python program for cartesian
# product of N-sets
# function to find cartesian product of two sets
def cartesianProduct(set_a, set_b):
result =[]
for i in range(0, len(set_a)):
for j in range(0, len(set_b)):
# for handling case having cartesian
# product first time of two sets
if type(set_a[i]) != list:
set_a[i] = [set_a[i]]
# coping all the members
# of set_a to temp
temp = [num for num in set_a[i]]
# add member of set_b to
# temp to have cartesian product
temp.append(set_b[j])
result.append(temp)
return result
# Function to do a cartesian
# product of N sets
def Cartesian(list_a, n):
# result of cartesian product
# of all the sets taken two at a time
temp = list_a[0]
# do product of N sets
for i in range(1, n):
temp = cartesianProduct(temp, list_a[i])
print(temp)
# Driver Code
list_a = [[1, 2], # set-1
['A'], # set-2
['x', 'y', 'z']] # set-3
# number of sets
n = len(list_a)
# Function is called to perform
# the cartesian product on list_a of size n
Cartesian(list_a, n)
输出:
[[1, 'A', 'x'],
[1, 'A', 'y'],
[1, 'A', 'z'],
[2, 'A', 'x'],
[2, 'A', 'y'],
[2, 'A', 'z']]