任意多个集合的笛卡尔积

给定N个集合。任务是编写一个程序,按给定顺序对所有集合进行笛卡尔积。 实例 :

null
Input:1st set: 1 22nd set: A 3rd set: x 4th set: 5 6Output:[['1', 'A', 'x', '5'], ['1', 'A', 'x', '6'], ['2', 'A', 'x', '5'], ['2', 'A', 'x', '6']]Input:1st set: 1 22nd 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']]

方法: 该方法是在开始时计算集合1和集合2的乘积,然后集合1和集合2的结果将与集合3有一个乘积,然后集合1、集合2、集合3的结果将与集合4有一个笛卡尔积,依此类推,直到集合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']]

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享