2010-08-06 3 views
1

Я отчаянно нуждаюсь в помощи некоторых алгоритмов при объединении списков внутри списков. Если предположить, что у меня есть следующая структура данных:Все возможные комбинации списка списка

 
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'] 

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

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

ответ

3
itertools.product(*fields) 
+0

Вы правы. Я уже кратко посмотрел на itertools.product, но, видимо, недостаточно хорошо, так как я думал, что функциональность немного изменилась. Спасибо! – agnsaft

10

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

+0

Nice one. 5more – InsertNickHere

+0

* стыдно * ... нет действительно. Я посмотрел на ручную запись для itertools и пропустил это, очевидно. Благодарю. – agnsaft

Смежные вопросы