У меня есть список списков, и мне нужно объединить их вместе с каждым элементом списка. См. пример ниже:
my_list = [1, [2, 3], [4, 5]]
Ожидаемый результат:
['1', '1.2', '1.3', '1.2.4', '1.2.5', '1.3.4', '1.3.5']
Я пытался написать логику, но всегда не хватает того или иного элемента.
Вы пытаетесь создать список строк в результате? Потому что то, что вы показали как ожидаемый результат, не является допустимым синтаксисом Python.
Да, вывод должен быть строкой для каждого элемента






def join_lists(result, prefix, items):
if not items:
result.append('.'.join(map(str, prefix)))
else:
for i, item in enumerate(items[0]):
join_lists(result, prefix + [item], items[1:])
join_lists(result, prefix, items[1:])
my_list = [1, [2, 3], [4, 5]]
result = []
join_lists(result, [1], my_list)
print(result)
будет производить:
Output: ['1', '1.2', '1.3', '1.2.4', '1.2.5', '1.3.4', '1.3.5']
Спасибо. Одна проблема: вы добавили 1 в качестве префикса, однако это не всегда так, даже если первый элемент может быть подсписком. в основном логика должна искать все элементы в списке и объединять их. даже второй или другие элементы в списке гарантированно являются подсписком, это может быть элемент или список.
Вы можете сделать это:
import itertools
my_list = [1, [2, 3], [4, 5]]
# First convert each scalar into list
my_list = [[e] if not isinstance(e, list) else e for e in my_list]
# and then each element into str
my_list = [list(map(str, e)) for e in my_list]
# Then initialize a result list and keep extending with product of the result
# with the next element in my_list
t = my_list[0]
out = []
out.extend(t)
for lst in my_list[1:]:
t = list(map('.'.join, itertools.product(t, lst)))
out.extend(t)
print(out)
['1', '1.2', '1.3', '1.2.4', '1.2.5', '1.3.4', '1.3.5']
# for the input my_list = [[1,2],3,[4,5]]
my_list = [[1,2],3,[4,5]]
print(out)
['1', '2', '1.3', '2.3', '1.3.4', '1.3.5', '2.3.4', '2.3.5']
Это не будет работать, если 1-й элемент сам по себе является примером подсписка: my_list=[[1,2],3,[4,5]]
Каков ожидаемый результат для этого входа?
в основном все комбинации всех предметов. ожидаемый результат будет ['1.3.4', '1.3.5', '1.3', '1', '2.3.4', '2.3.5', '2.3', '2']
Прежде всего, вывод, который я получаю для ввода, указанного вами в комментарии, такой же, как вы ожидаете, за исключением порядка. См. обновленный ответ для вывода для второго ввода. Во-вторых, вам нужно четко указать это в постановке задачи, а также честно рассказать о своей попытке.
Используя itertools.accumulate:
from itertools import accumulate, product
# ensure sub-items are lists
def as_lst(x):
return x if isinstance(x, list) else [str(x)]
out = [str(e) for l in (accumulate(map(as_lst, my_list),
lambda *x: ['.'.join(map(str, y))
for y in product(*x)])
)
for e in as_lst(l)]
print(out)
Выход:
['1', '1.2', '1.3', '1.2.4', '1.2.5', '1.3.4', '1.3.5']
Вывод для my_list=[[1,2],3,[4,5]]:
['1', '2', '1.3', '2.3', '1.3.4', '1.3.5', '2.3.4', '2.3.5']
Покажите свой код как правильно отформатированный текст в вопросе.