列表子列表

我想要一个split_list([1,2,4,3])产生以下 7 个列表的函数:


[[1], [2,4,3]]

[[1,2], [4,3]]

[[1,2,4], [3]]

[[1,2], [4],[3]]

[[1],[2,4],[3]]

[[1],[2],[4,3]]

[[1],[2],[4],[3]]

较小的列表首先产生 -[[1], [2,4,3]]长度为 2 而[[1],[2],[4],[3]]最后产生,因为它的长度为 4。这是我得到的:


def split_list(l):

  for i in range(1, len(l)):

    yield [l[:i],l[i:]]


for i in split_list((1,2,4,3)):

    print(i)


千巷猫影
浏览 177回答 3
3回答

哆啦的时光机

试试这个:def split_list(l):    if len(l) == 1:        yield [ l ]        return    for s in split_list(l[1:]):        for n, sub in enumerate(s):            if len((s[:n] + [[ l[0] ] + sub]  + s[n+1:])[0]) !=4:                yield s[:n] + [[ l[0] ] + sub]  + s[n+1:]                   yield [[l[0]]] + sfor lst in split_list([1, 2, 3, 4]):        print lst问题是递归解决的。在输出中:[[1], [2, 3, 4]][[1, 2], [3, 4]][[2], [1, 3, 4]][[1], [2], [3, 4]][[1, 2, 3], [4]][[2, 3], [1, 4]][[1], [2, 3], [4]][[1, 3], [2, 4]][[3], [1, 2, 4]][[1], [3], [2, 4]][[1, 2], [3], [4]][[2], [1, 3], [4]][[2], [3], [1, 4]][[1], [2], [3], [4]]

慕尼黑的夜晚无繁华

如果将列表本身作为第一个元素包含在内没有问题,您可以这样做:def split_list(lst):    if not lst:        yield []    for i in range(len(lst), 0, -1):        for j in split_list(lst[i:]):            yield [lst[:i]] + jfor l in split_list([1, 2, 4, 3]):    print(l)输出[[1, 2, 4, 3]][[1, 2, 4], [3]][[1, 2], [4, 3]][[1, 2], [4], [3]][[1], [2, 4, 3]][[1], [2, 4], [3]][[1], [2], [4, 3]][[1], [2], [4], [3]]

30秒到达战场

您可以通过递归使用列表切片:def split_list(d):   for i in range(len(d)):      if len(d[i+1:]) > 0:        for c in split_list(d[i+1:]):          yield [d[:i+1], *c]      else:        yield [d]print(list(split_list([1,2,4,3])))输出:[[[1], [2], [4], [3]], [[1], [2], [4, 3]], [[1], [2, 4], [3]], [[1], [2, 4, 3]], [[1, 2], [4], [3]], [[1, 2], [4, 3]], [[1, 2, 4], [3]], [[1, 2, 4, 3]]]编辑:事件更短def split_list(d):  if len(d) > 1:    return [list(filter(None, [d[:i+1], *c])) for i in range(len(d)) for c in split_list(d[i+1:])]  return [d] if not isinstance(d, list) else [[d]]输出:[[[1], [2], [4], [3]], [[1], [2], [4, 3]], [[1], [2, 4], [3]], [[1], [2, 4, 3]], [[1, 2], [4], [3]], [[1, 2], [4, 3]], [[1, 2, 4], [3]], [[1, 2, 4, 3]]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python