Все возможные комбинации списка из списка - PullRequest
1 голос
/ 06 августа 2010

Мне крайне нужна помощь алгоритма при объединении списков внутри списков. Предполагая, что у меня есть следующая структура данных:

fields = [  ['a1', 'a2', 'a3'],
            ['b1', 'b2', 'b3'],
            ['c1', 'c2', 'c3'],
            ['d1', 'd2', 'd3']  ]

Я пытаюсь написать генератор (Python), который выдаст каждую возможную комбинацию элементов так, чтобы следующий код:

for x in thegenerator(fields):
    print(x)

даст следующий вывод:

['a1', 'b1', 'c1', 'd1']
['a1', 'b1', 'c1', 'd2']
['a1', 'b1', 'c1', 'd3']
['a1', 'b1', 'c2', 'd1']
['a1', 'b1', 'c2', 'd2']
['a1', 'b1', 'c2', 'd3']
...
['a3', 'b3', 'c3', 'd3']

Тем не менее, мое мышление сегодня полностью отключено, поэтому я не могу думать, как мне лучше всего перебрать структуру, чтобы получить все комбинации наиболее чистым способом с использованием Python. Я уверен, что это было сделано ранее кем-то, но после нескольких поисков в Google и стеке я отказался от поиска правильной комбинации ключевых слов, чтобы найти подходящий алгоритм для этой проблемы.

Есть какие-нибудь идеи, каков будет самый чистый алгоритм, чтобы это исправить?

Ответы [ 2 ]

10 голосов
/ 06 августа 2010

Просто используйте itertools.product, это именно то, что вы пытаетесь сделать.Если вам интересен алгоритм, вы всегда можете посмотреть исходный код.

3 голосов
/ 06 августа 2010
itertools.product(*fields)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...