Ваш код почти работает, за исключением того, что вы никогда ничего не делаете с результатом combine
(распечатываете его или добавляете в какой-либо список результатов) и не удаляете элемент ''
. Однако для более длинного списка это может быть немного медленным, поскольку оно имеет квадратичную сложность O (n²).
Вместо этого вы можете использовать словарь для сопоставления первых элементов с остальными элементами списков. Затем вы можете использовать цикл или списки, чтобы объединить списки с правильными суффиксами:
lst = [['a','b','c',''],['c','e','f'],['c','g','h']]
import collections
replacements = collections.defaultdict(list)
for first, *rest in lst:
replacements[first].append(rest)
result = [l[:-2] + c for l in lst if l[-1] == "" for c in replacements[l[-2]]]
# [['a', 'b', 'c', 'e', 'f'], ['a', 'b', 'c', 'g', 'h']]
Если в списке может быть несколько заполнителей '', и если они могут появиться в середине списка, то все становится немного сложнее. Вы можете сделать это рекурсивной функцией. (Это можно сделать более эффективным, используя индекс вместо многократного разбиения списка.)
def replace(lst, last=None):
if lst:
first, *rest = lst
if first == "":
for repl in replacements[last]:
yield from replace(repl + rest)
else:
for res in replace(rest, first):
yield [first] + res
else:
yield []
for l in lst:
for x in replace(l):
print(x)
Выход для lst = [['a','b','c','','b',''],['c','b','','e','f'],['c','g','b',''],['b','x','y']]
:
['a', 'b', 'c', 'b', 'x', 'y', 'e', 'f', 'b', 'x', 'y']
['a', 'b', 'c', 'g', 'b', 'x', 'y', 'b', 'x', 'y']
['c', 'b', 'x', 'y', 'e', 'f']
['c', 'g', 'b', 'x', 'y']
['b', 'x', 'y']