2017-06-26 10 views
-1

例如,我有10个男孩和10个女孩。在python中获取可能的2组元素之间的配对

在每个配对场景中,我想将每个男孩与一个女孩配对。配对是排他性的。一旦一个男孩与一个女孩配对,男孩就不能与另一个女孩配对,反之亦然。

如何最佳地找到python中所有可能的配对方案?另外,如何用恰当的数学术语来描述这个问题。

谢谢!

编辑:在配对

+0

你想找到两个列表的所有排列? – Carcigenicate

+1

你所描述的是一组男孩和一组女孩的笛卡尔积。你可以使用['itertools.product'](https://docs.python.org/2/library/itertools.html#itertools.product)。 – BrenBarn

+0

@BrenBarn这不是一个笛卡儿的产品,虽然因为配对是独家 –

回答

4

添加约束什么像这样

from itertools import permutations 

boys = ['greg', 'john', 'andy'] 
girls = ['lilly', 'samantha', 'tammy'] 
pairings = [list(zip(boys, girls_perm)) for girls_perm in permutations(girls)] 

这给可能的配对

pairings = 
[[('greg', 'lilly'), ('john', 'samantha'), ('andy', 'tammy')], 
[('greg', 'lilly'), ('john', 'tammy'), ('andy', 'samantha')], 
[('greg', 'samantha'), ('john', 'lilly'), ('andy', 'tammy')], 
[('greg', 'samantha'), ('john', 'tammy'), ('andy', 'lilly')], 
[('greg', 'tammy'), ('john', 'lilly'), ('andy', 'samantha')], 
[('greg', 'tammy'), ('john', 'samantha'), ('andy', 'lilly')]] 
+0

哇,这是一个美丽的解决方案。谢谢! –

相关问题