生成固定长度的所有排列,其中元素来自两个不同的集合
问题描述:
python itertools
中是否有任何函数需要生成满足某些条件的所有数字排列。生成固定长度的所有排列,其中元素来自两个不同的集合
(A,B,C,d)
- a和d:来自
set 1 = {1,2,3}
- b和c:来自
set 2
,其中元件的数量设定2是196. - 排列需要与替换。
所以A和B应该只值从1集B和C只能从集2.如何生成所有与该限制permutaitons取值
我知道如何产生使用itertools
进行置换以生成置换的置换。但我有问题,当谈到采取项目从两套
答
如果我正确地解释你的文字,下面的代码应该是你在找什么:
import itertools
set1 = [1,2,3]
set2 = [4,5]
for i in itertools.permutations(set1, 2):
for j in itertools.permutations(set2, 2):
print("({},{},{},{})".format(i[0], j[0], j[1], i[1]))
打印
(1,4,5,2)
(1,5,4,2)
(1,4,5,3)
(1,5,4,3)
(2,4,5,1)
(2,5,4,1)
(2,4,5,3)
(2,5,4,3)
(3,4,5,1)
(3,5,4,1)
(3,4,5,2)
(3,5,4,2)
正如@spectras所示,产品更优雅:
p1 = itertools.permutations(set1, 2)
p2 = itertools.permutations(set2, 2)
for i in itertools.product(p1, p2):
print(i[0][0], i[1][0], i[1][1], i[0][1])
+0
正如@spectras建议的那样,另一种方法是使用产品三次,然后重新排序条目。但是这个也适用。 –
+1
是的,编辑我的答案,但kidos到@spectras – andymar
但是我不明白这些是如何排列的... –
所以......你需要为两组生成排列并计算笛卡尔积? (并安排结果一点)从你的问题不是很清楚^^ – spectras
什么意思'ie | set 2 |是196'? – RomanPerekhrest