与列表中的多个值组合 - 创建子列表

Combination with multiple values in list - creation of sublists

我有以下问题:

nums = [2, 4, 2, 10, 5] 

我想实现一些子列表,规则如下:

sublist = [[2], [2,4], [2,4,2], [2,4,2,10], [2,4,2,10,5], [4], [4,2], [4,2,10], [4,2,10,5] ... ]

我的代码:

def combinator(nums, N):

    for i in range(2**N):
        combo = []
        for j in range(N):
            if (i >> j) % 2 == 1:
                combo.append(nums[j])

        yield combo

out = []
N = len(nums)
for i in combinator(nums, N):
    out.append(i)

该代码会生成包含所有组合的不需要的列表。 我如何改进代码?

一个函数,它接受一个列表和returns所有子列表的列表,这些子列表的元素在原始列表中以相同的顺序相邻:

def sublists(xs):
    return [xs[n:m+1] for n in range(len(xs)) for m in range(n, len(xs))]


print(sublists([2, 4, 2, 10, 5]))

结果:

[[2], [2, 4], [2, 4, 2], [2, 4, 2, 10], [2, 4, 2, 10, 5], [4], [4, 2], [4, 2, 10], [4, 2, 10, 5], [2], [2, 10], [2, 10, 5], [10], [10, 5], [5]]