【问题标题】:Getting all ordered sublists of ordered lists获取有序列表的所有有序子列表
【发布时间】:2019-05-18 16:26:51
【问题描述】:

我们正在努力解决以下问题:
例如下面的列表,应该以相同的顺序划分为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]]

等等。

我怎样才能实现它?

【问题讨论】:

  • 您尝试了什么,遇到了什么错误?
  • 查看此解决方案link
  • @prashantrana 此解决方案不考虑订单。
  • @Stijin 那是提示。创建一个大小为 3 的嵌套列表,并使用此链接将值放入其中。
  • 您的问题的陈述是什么?我可以读到你要声明它,但是你先从一个例子开始。

标签: python list sorting


【解决方案1】:
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]

【讨论】:

  • 这很有帮助!非常感谢
【解决方案2】:

解决方案:

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=[]

【讨论】:

  • 感谢您提供此解决方案,但您知道如何使用 itertools.combinations 吗?所以我们可以从中获得所有可能的组合?因为我尝试了很多,但它没有考虑到顺序。
  • 嘿,我已经更新了将打印所有可能输出的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多