Python 获取有序列表的所有有序子列表
我们正在努力解决以下问题:Python 获取有序列表的所有有序子列表,python,list,sorting,Python,List,Sorting,我们正在努力解决以下问题: 例如,以下列表应按相同顺序划分为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]] 等等 我如何实现它?解决方案: n=列表的长度 k=m=3 def部件(n,k): def_零件(n、k、pre): 如果n您尝试了什么,会出现什么错误?请参阅此解决方案@p
例如,以下列表应按相同顺序划分为
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]]
等等
我如何实现它?解决方案:
n=列表的长度
k=m=3
def部件(n,k):
def_零件(n、k、pre):
如果n您尝试了什么,会出现什么错误?请参阅此解决方案@prashantrana此解决方案不考虑顺序。@Stijin这是提示。创建一个大小为3的嵌套列表,并使用此链接将值放入其中。您的问题是什么?我可以读到你将要声明它,但是你从一个例子开始。感谢这个解决方案,但是你知道如何使用itertools.combines吗?这样我们就可以从中获得所有可能的组合?因为我试了很多次,但是没有考虑顺序。嘿,我已经更新了代码,可以打印所有可能的输出。这非常有用!谢谢
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=[]
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]