Вот простое пошаговое решение. Это, вероятно, более неэффективно, чем другие ответы, но это простой подход.
Вы можете сначала перечислить все двоичные комбинации n-1
, используя itertools.product()
:
from itertools import product
lst = ['a', 'b', '1', '2']
def binary_combinations(bits):
return list(product([0, 1], repeat=bits))
binary_combs = binary_combinations(bits=len(lst) - 1)
# [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
Затем вы можете разбить свой список с помощью ''
между каждымпредмет. Это облегчает присоединение позже.
def intersperse(lst, item):
result = [item] * (len(lst) * 2 - 1)
result[0::2] = lst
return result
interspersed_items = intersperse(lst, '')
# ['a', '', 'b', '', '1', '', '2']
Затем, наконец, вы можете вывести комбинации с замененными -
и str.join()
комбинацией результатов:
for comb in binary_combs[1:]:
result = interspersed_items[:]
for i, binary in enumerate(comb):
if binary == 1:
result[i * 2 + 1] = '-'
print("".join(result))
, которая выводит следующие комбинации. Следующий порядок отличается от вопроса, но это не должно быть проблемой?
ab1-2
ab-12
ab-1-2
a-b12
a-b1-2
a-b-12
a-b-1-2