Мне нужно разработать список, который содержит все возможные комбинации в порядке элементов в n списках. В основном я пытаюсь найти все возможные пути, которые мне понадобятся позже для другой части моей программы.
Я уже сделал несколько простых кодов для двух списков, но проблема в том, что я не знаю, сколько вводит пользователь, поэтому я должен догадаться. На данный момент я определил функцию, которая выводит все возможные комбинации (только в одну сторону, потому что это пути). Я также тестировал другие альтернативы, такие как itertools (которые, я думаю, могут содержать ответ на мою проблему), или использовал массивы numpy (проблема в том, что мой массив не однороден).
Список ввода может выглядеть примерно так (3 измерения):
chords = [[[1, 4, 8, 12], [1, 4, 10, 12]], [[4, 7, 13, 19], [4, 9, 13, 21]]]
Моя функция, которая может генерировать перестановки между двумя списками:
def combination(list1, list2):
list = []
for x in list1:
for y in list2:
list.append([x,y])
return list
combination(chords[0], chords[1])
Эта функция работает как задумано, но проблема, например, в том, что я ввожу combination(combination(chords[0], chords[1]), chords[3])
, который не учитывается отдельно chords[0]
и chords[1]
(тем не менее, он работает как задумано).
Edit:
Хорошо, так как, как указал @iBug, хороший способ сделать это с помощью itertools.product ():
bases_chords = [···] #It's a three dimensional array I've filled out before
possibilities = [] #The list that will contain all the different combinations
for a in product(*bases_chords): #The asterisk means that I input everything on the list
possibilities.append(a)
print(possibilities)
print(len(possibilities)) #Just to check if the dimensions are right