如何首先根据初始列表的单个元素将列表拆分为子列表,然后简单地在 python 中将列表的连续部分拆分为子列表?

How to split a list into sublists based on single elements of the initial list first and then contiguous portions of the list simply in python?

我过去一直在寻找如何做到这一点,但似乎找不到任何能解决我的问题的东西,或者它的想法和代码太复杂了,我作为一个完全的初学者无法理解。所以基本上这是我必须做的任务:

写一个函数 all sublists(lst) 对于列表 lst returns 作为其结果 a lst 的所有子列表的列表。子列表是包含连续部分的列表 原始的,即包含来自零个或多个连续元素 原创.

例如,对于列表 [1, 2, 3],结果应该是

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

我开始做的是创建一个包含所有数字的完整列表,然后将其拆分。但是我不能使用 split 函数,因为它是一个字符串并且不知道任何正确的拼接方法。

使用itertools.combinations

from itertools import combinations

l = [1, 2, 3]
final = []
for i in range(len(l)+1):
  final += list(combinations(l,i))

print(final)

[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]

这是一个使用双循环找到您想要的结果的函数。

def get_contiguous_sublists(lst):
    out = [[]]

    # find the length of the input list (added 1 for convenience which will be useful later)
    len_lst = len(lst) + 1
    
    # for each integer between 1 and the full length of the input list,
    # we slice the input list `lst` to create new lists of this length
    # and add it to the output list `out`
    for length in range(1, len_lst):
        # here, we are changing the starting point of the list slicing, 
        # i.e. whether we want to start from 1 or 2 or 3 for [1,2,3]
        for i in range(len_lst - length):
            out += [lst[i : i + length]]
    return out

输出:

>>> get_contiguous_sublists([1,2,3])
[[], [1], [2], [3], [1, 2], [2, 3], [1, 2, 3]]


>>> get_contiguous_sublists([1,2,3,4])
[[], [1], [2], [3], [4], [1, 2], [2, 3], [3, 4], [1, 2, 3], [2, 3, 4], [1, 2, 3, 4]]