2015-05-25 3 views
-1

Я хочу, чтобы создать список возможных комбинаций списка списков (например, будет лучше объяснить)Программных генерировать список комбинаций других списков

list=[[a,b],[c,d],[f]] 

Результат должен быть

acf 
adf 
bcf 
bdf 

Длина списка может варьироваться, а длина списков в списке переменных также может изменяться. Как я буду делать эти/эти петли программно? (Предпочтительно объяснено в Python или псевдо-языке)

+0

не зови list 'list'. Вы скрываете тип «list». – khelwood

+0

Я знаю, это всего лишь пример – pidgey

ответ

5

Вот что itertools.product для:

>>> lst = ['ab','cd','f'] 
>>> from itertools import product 
>>> list(product(*lst)) 
[('a', 'c', 'f'), ('a', 'd', 'f'), ('b', 'c', 'f'), ('b', 'd', 'f')] 
+0

Спасибо! И он также работает с [["a", "b"], ["c", "d"], ["f"]], что здорово! – pidgey

+0

Да, это то же самое в этом контексте. Я просто слишком ленив, чтобы набирать все эти цитаты и т. Д. –

0

Вы можете сделать это рекурсивно:

def printCombos(arrays, combo): 
    if len(arrays) == 0: 
    print combo 
    else: 
    for i in arrays[0]: 
     combo.append(i) 
     printCombos(arrays[1:], combo) 
     combo.pop() 

l=[['a','b'],['c','d'],['f']] 
printCombos(l, []) 
+0

, какова будет ваша переменная «combo»? – pidgey

+0

Это комбо видно до сих пор. Он начинается как пустой список. –

1
import itertools 

list=[['a','b'],['c','d'],['f']] 

for comb in itertools.product(*list): 
    print ''.join(comb) 
0
curlist = [] 

for firstobj in listoflists[0]: 
    for secondobj in listoflists[1]: 
     for lastobj in listoflists[2]: 
      curlist.append(firstobj) 
      curlist.append(secondobj) 
      curlist.append(lastobj) 
      print ','.join(curlist) 
Смежные вопросы