Python组合没有重复 - Pyncomb?

时间:2011-06-05 18:57:38

标签: python combinatorics

我正在尝试用Python中的数据做一些组合的东西。 我看了How to generate all permutations of a list in Python这个问题,但认为这不符合我的需要.. 我有这种类型的数据......:

    group1-Steve
    group1-Mark
    group1-Tom
    group2-Brett
    group2-Mick
    group2-Foo
    group3-Dan
    group3-Phil

...我需要制作三个元素的所有可能组合,每组只有一个,不重复,每个组合保存到一个列表。

我知道在这种情况下有18种可能的不同组合(3 * 3 * 2 = 18),但不知道我怎么能写这段代码。 我读过Pyncomb包,但不知道在这种情况下应用的功能;也许有一个功能可以完成这项工作。

希望有人能帮助我......

提前致谢;

Peixe

2 个答案:

答案 0 :(得分:9)

最简单的方法是使用itertools.product()

group1 = ["Steve", "Mark", "Tom"]
group2 = ["Brett", "Mick", "Foo"]
group3 = ["Dan", "Phil"]
for x in itertools.product(group1, group2, group3):
    print x

打印

('Steve', 'Brett', 'Dan')
('Steve', 'Brett', 'Phil')
('Steve', 'Mick', 'Dan')
('Steve', 'Mick', 'Phil')
('Steve', 'Foo', 'Dan')
('Steve', 'Foo', 'Phil')
('Mark', 'Brett', 'Dan')
('Mark', 'Brett', 'Phil')
('Mark', 'Mick', 'Dan')
('Mark', 'Mick', 'Phil')
('Mark', 'Foo', 'Dan')
('Mark', 'Foo', 'Phil')
('Tom', 'Brett', 'Dan')
('Tom', 'Brett', 'Phil')
('Tom', 'Mick', 'Dan')
('Tom', 'Mick', 'Phil')
('Tom', 'Foo', 'Dan')
('Tom', 'Foo', 'Phil')

答案 1 :(得分:4)

另一种避免导入的替代方法是使用列表解析:

[(a, b, c) for a in group1 for b in group2 for c in group3]

这给出了与Sven相同的结果,但如果你想做一些过滤也很好。