Комбинации двух списков в Python с сохранением порядка столбцов - PullRequest
0 голосов
/ 12 июля 2020

У меня есть исходный список в Python, который выглядит так:

list = [a, 1, b, 2, c, 3]

Я разделил его на два списка следующим образом:

list_1 = [a, b, c]
list_2 = [1, 2, 3]

Что я хочу find - это окончательный список списков, который дает мне все возможные комбинации list_1 и list_2 без изменения любой буквы или числа из их текущего «столбца». Таким образом, результат должен выглядеть так:

Желаемый результат:

final_list =[[a, b, c],
             [a, 2, c],
             [a, b, 3],
             [a, 2, 3],
             [1, b, c],
             [1, 2, c],
             [1, b, 3],
             [1, 2, 3]]

Есть идеи, как я мог бы достичь этого?

Ответы [ 2 ]

3 голосов
/ 12 июля 2020

Вот рекурсивный метод грубой силы:

def get_combinations(curr_list, list1, list2, index, overall_list):
    if index == len(list1) or index == len(list2):
        overall_list.append(curr_list[:])
        return

    curr_list[index] = list1[index]
    get_combinations(curr_list, list1, list2, index+1, overall_list)
    curr_list[index] = list2[index]
    get_combinations(curr_list, list1, list2, index+1, overall_list)


list1 = list(input().strip().split())
list2 = list(input().strip().split())
overall_list = []
curr_list = [None] * min(len(list1), len(list2))
get_combinations(curr_list, list1, list2, 0, overall_list)
for l in overall_list:
    print(*l)

Вход:

a b c
1 2 3

Выход:

a b c
a b 3
a 2 c
a 2 3
1 b c
1 b 3
1 2 c
1 2 3
0 голосов
/ 12 июля 2020

Думаю, будет проще взглянуть на вашу проблему так:

list = [a, 1, b, 2, c, 3]

Составьте три списка, один для значений, которые может принимать первое число, один для второго и один для третьего:

first = [a,1]
second = [b,2]
third = [c,3]

Чтобы сгенерировать каждую комбинацию, вы можете объединить три цикла for, которые перебирают элементы ваших трех списков. Какой список используется, в каком l oop изменяется порядок, в котором генерируются комбинации. Мой пример соответствует вашему выводу:

for f in first:
    for t in third:
        for s in second:
            //Here you have a [f,s,t] combination
...