Получение всех упорядоченных списков упорядоченных списков - PullRequest
0 голосов
/ 18 декабря 2018

Мы боремся со следующей проблемой:
Например, следующий список должен быть разделен на m списки с одинаковым порядком.

Допустим, [9,7,6,5,2,10,8,4,3,1] с m=3 несколькимииз конечных результатов должны быть:

[[9],[7,6],[5,2,10,8,4,3,1]]
[[9,7],[6,5,2,10,8,4,3],[1]]
[[9,7,6,5],[2,10,8,4],[3,1]]

и т. д.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018
from itertools import combinations, permutations


perm=[]
index = [9,7,6,5,2,10,8,4,3,1]
perm.append(index)
M = 3
slicer = [x for x in combinations(range(1, len(index)), M - 1)]
slicer = [(0,) + x + (len(index),) for x in slicer]

result = [tuple(p[s[i]:s[i + 1]] for i in range(len(s) - 1)) for s in slicer for p in perm]
0 голосов
/ 18 декабря 2018

Решение:

n = длина списка

k = m = 3

def part(n, k):
 def _part(n, k, pre):
    if n <= 0:
        return []
    if k == 1:
        if n <= pre:
            return [[n]]
        return []
    ret = []
    for i in range(min(pre, n), 0, -1):
        ret += [[i] + sub for sub in _part(n-i, k-1, i)]
    return ret
 return _part(n, k, n)

import itertools
perm=[]
partitions=part(n, m)
for i in partitions:
    perm.append(list(itertools.permutations(i,m)))
perm1=list(itertools.chain.from_iterable(perm))  
y= [9,7,6,5,2,10,8,4,3]
new=[]
for i in perm1:
   k=0
   for j in i:
       new.append(list(y[k:k+j]))
       k=k+j
       if k==9:
         print(new)
         new=[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...