Генерация комбинаций в питоне - PullRequest
15 голосов
/ 03 июля 2010

Я не уверен, как это сделать в Python, если это вообще возможно. Что мне нужно сделать, это создать массив (или матрицу, или вектор?) Из 3 отдельных массивов. Каждый массив как 4 элемента как таковой, они возвращают это:

Class1 = [1,2,3,4] Class2 = [1,2,3,4] Class3 = [1,2,3,4]

Теперь я хотел бы вернуть все возможные комбинации этих трех классов.

Пример:

1 1 1
2 1 1
3 1 1
4 1 1
1 2 1
2 2 1
3 2 1
4 2 1 ...

... и т. Д. До 64 строк (4 элемента * 16 возможных комбинаций для каждого класса = 64 строки

Я надеюсь, что есть способ сделать это в Python. Я уверен, что есть, но я не уверен, каким будет самый эффективный путь. Возможно, оператор цикла for для каждого элемента каждого класса? Или теперь, когда я исследую это, itertools справится с этим?

Заранее благодарим за любую предложенную помощь.

Ответы [ 3 ]

29 голосов
/ 03 июля 2010

То, что вы хотите, называется декартовым произведением :

import itertools

iterables = [ [1,2,3,4], [88,99], ['a','b'] ]

for t in itertools.product(*iterables):
    print t
8 голосов
/ 03 июля 2010

Самый простой способ:

for i in Class1:
    for j in Class2:
        for k in Class3:
            print (i,j,k)
1 голос
/ 03 июля 2010

Проверьте Python itertools стандартный модуль :

itertools.combinsk (итеративный, r)

Возвращает r подпоследовательностей элементов из входного итерируемого.

...