首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有可能的(一夫一妻制)配对,由两个名单(男孩和女孩)组成

所有可能的(一夫一妻制)配对,由两个名单(男孩和女孩)组成
EN

Stack Overflow用户
提问于 2012-01-16 21:42:37
回答 1查看 710关注 0票数 3

我有这两份名单:

代码语言:javascript
复制
boys  = [1,2,3]
girls = [1,2,3]

你将如何建立所有可能的(一夫一妻制)配对[boy, girl]boysgirls中只有3对,我认为这是所有可能的配对的列表:

代码语言:javascript
复制
[
 [[1,1], [2,2], [3,3]],
 [[1,1], [2,3], [3,2]],
 [[1,2], [2,1], [3,3]],
 [[1,2], [2,3], [3,2]],
 [[1,3], [2,1], [3,2]],
 [[1,3], [2,2], [3,1]]
]

一般情况下,你会怎样做(以上述格式)?这就是我能想到的..。

代码语言:javascript
复制
pairs = list(itertools.product(boys, girls))
possible_pairings = []
for i, p in enumerate(pairs):
    if i % len(boys) == 0:
        print
    print list(p),
#   possible_pairings.append(pairing)

..。这就产生了这个输出。

代码语言:javascript
复制
[1, 1] [1, 2] [1, 3]
[2, 1] [2, 2] [2, 3]
[3, 1] [3, 2] [3, 3]

,你如何找到所有可能的配对(上面写的是特定的例子)?,这就像你必须用6种方法来乘3x3矩阵的元素(找到它的行列式)。:)

斯文的回答(加上我的enumerate )

代码语言:javascript
复制
possible_pairings = []
possible_pairings_temp = []
boys  = ["b1", "b2", "b3"]
girls = ["g1", "g2", "g3"]

for girls_perm in itertools.permutations(girls):
    for i, (b, g) in enumerate(zip(boys, girls_perm)):
        possible_pairings_temp.append([b, g])
        if (i + 1) % len(boys) == 0: # we have a new pairings list
            possible_pairings.append(possible_pairings_temp)
            possible_pairings_temp = []
    print

print possible_pairings

这完全符合问题的格式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-16 21:45:32

你所描述的是集合的排列。让男孩们按给定的顺序排列,然后遍历女孩的所有排列--这将给你提供所有可能的配对:

代码语言:javascript
复制
boys = ["b1", "b2", "b3"]
girls = ["g1", "g2", "g3"]
for girls_perm in itertools.permutations(girls):
    for b, g in zip(boys, girls_perm):
        print b + g,
    print

版画

代码语言:javascript
复制
b1g1 b2g2 b3g3
b1g1 b2g3 b3g2
b1g2 b2g1 b3g3
b1g2 b2g3 b3g1
b1g3 b2g1 b3g2
b1g3 b2g2 b3g1
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8886680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档