Sie erstellen Schnittpunkte; Schneiden Sie nach dem aktuellen Element oder nicht. Sie können diese mit booleans erzeugen:
from itertools import product
def sublists(lst):
for doslice in product([True, False], repeat=len(lst) - 1):
slices = []
start = 0
for i, slicehere in enumerate(doslice, 1):
if slicehere:
slices.append(lst[start:i])
start = i
slices.append(lst[start:])
yield slices
Demo:
>>> from pprint import pprint
>>> mylist = [101, 102, 103, 104, 105, 106]
>>> pprint(list(sublists(mylist)))
[[[101], [102], [103], [104], [105], [106]],
[[101], [102], [103], [104], [105, 106]],
[[101], [102], [103], [104, 105], [106]],
[[101], [102], [103], [104, 105, 106]],
[[101], [102], [103, 104], [105], [106]],
[[101], [102], [103, 104], [105, 106]],
[[101], [102], [103, 104, 105], [106]],
[[101], [102], [103, 104, 105, 106]],
[[101], [102, 103], [104], [105], [106]],
[[101], [102, 103], [104], [105, 106]],
[[101], [102, 103], [104, 105], [106]],
[[101], [102, 103], [104, 105, 106]],
[[101], [102, 103, 104], [105], [106]],
[[101], [102, 103, 104], [105, 106]],
[[101], [102, 103, 104, 105], [106]],
[[101], [102, 103, 104, 105, 106]],
[[101, 102], [103], [104], [105], [106]],
[[101, 102], [103], [104], [105, 106]],
[[101, 102], [103], [104, 105], [106]],
[[101, 102], [103], [104, 105, 106]],
[[101, 102], [103, 104], [105], [106]],
[[101, 102], [103, 104], [105, 106]],
[[101, 102], [103, 104, 105], [106]],
[[101, 102], [103, 104, 105, 106]],
[[101, 102, 103], [104], [105], [106]],
[[101, 102, 103], [104], [105, 106]],
[[101, 102, 103], [104, 105], [106]],
[[101, 102, 103], [104, 105, 106]],
[[101, 102, 103, 104], [105], [106]],
[[101, 102, 103, 104], [105, 106]],
[[101, 102, 103, 104, 105], [106]],
[[101, 102, 103, 104, 105, 106]]]
Wenn Sie den letzten Eintrag löschen möchten (eine Liste mit nur einer Liste darin, wiederum enthält alle Elemente enthält), ersetzen die letzten 2 Zeilen mit:
if start:
slices.append(lst[start:])
yield slices
Dies ist kein Duplikat von [Python: Zeige alle möglichen Gruppierungen einer Liste, wobei nur die Anzahl der Unterlisten angegeben wird (die Längen sind variabel)] (https://stackoverflow.com/q/9088321); Diese Frage produziert nur eine feste Anzahl von Splits an allen möglichen Orten. –
@MartijnPieters - Nur ein Split? '>>> Liste (split_list ([1, 2, 3, 4], 3))' -> '[[[1], [2], [3, 4]], [[1], [2, 3], [4]], [[1, 2], [3], [4]]] ' – TigerhawkT3
@ TigerhawkT3: also müsstest du radeln und mehr und mehr Splits erstellen. Es kann viel effizienter für diesen Anwendungsfall getan werden. –