Учитывая упорядоченный список целых чисел:Найти все возможные упорядоченные группы в списке
[1,3,7,8,9]
Как я могу найти все подсписки, которые могут быть созданы из исходного списка, где поддерживается порядок? Используя пример выше, я ищу способ программно генерировать эти последовательности:
[[1],[3,7,8,9]]
[[1, 3],[7,8,9]]
[[1, 3, 7],[8,9]]
[[1, 3, 7, 8],[9]]
[[1, 3, 7, 8, 9]]
[[1, 3, 7], [8, 9]]
[[1], [3, 7], [8], [9]]
[[1], [3], [7, 8], [9]]
[[1], [3], [7], [8, 9]]
...
Я в основном ищет способ, чтобы генерировать все перестановки списка, где поддерживается порядок. Я могу создать все подсписки, где Есть только 2 подсписки в общей сложности, используя этот код:
def partition(arr, idx):
return [arr[:idx], arr[idx:]]
l = [1,3,7,8,9]
for idx in range(1, len(l)):
groups = partition(l, idx)
print(groups)
[[1], [3, 7, 8, 9]]
[[1, 3], [7, 8, 9]]
[[1, 3, 7], [8, 9]]
[[1, 3, 7, 8], [9]]
Однако это фрагменты кода только разбивает исходный список на два и генерирует все возможные подсписки, где Есть только два подсписки. Как я могу сгенерировать все возможные подсписки, которые могут быть созданы из исходного списка, где поддерживается порядок?
Похоже, вы заново изобретать колесо с 'subsets'. Я уверен, что с помощью ['itertools.combinations'] можно было бы сделать то же самое (https://docs.python.org/3/library/itertools.html#itertools.combinations). – Dunes
Я полагаю, вы могли бы вместо этого определить 'подмножества' как' для i в диапазоне (len (seq) +1): для x в itertools.combinations (seq, i): yield list (x) '. Не уверен, что вы могли бы сделать это только с одним циклом 'for'. – Kevin
'[item for x, item in zip (mask, seq) if x]' -> 'list (itertools.compress (seq, mask))' – Navith