python3列出了所有可能的内聚组合

2024-10-04 05:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在尝试列出另一个列表的所有可能的内聚组合,所以从[0,1,2,3]我想得到[[0],[0,1],[0,1,2],[0,1,2,3],[1],[1,2],[1,2,3],[2],[2,3]]。到目前为止我得到了这个:

def expandArray(arr):
    result = []
    for x in range(0, len(arr)):
        subArray = [arr[x]]
        result.append(subArray)
        for y in range(x + 1, len(arr)):
            subArray.append(arr[y])
            result.append(subArray)
    return(result)

但是它返回:[[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],[1,2,3],[1,2,3],[1,2,3],[2,3],[3]。你知道吗

我做错什么了?你知道吗


Tags: in列表forlenreturndefrangeresult
2条回答

subArray是在for循环中修改的列表。当你附加到它时,你不会创建一个新的列表,但是你会修改它,然后再把它放到列表中,这样最终会得到一个有多个相同列表副本的结果。比较此代码:

a = []
b = [5]
a.append(b)
b.append(1)
a.append(b)

print(a)

将输出:

[[5, 1], [5, 1]]

下面是一种使用list slicing获得所需输出的方法:

def get_combs(iterable):
    for k, _ in enumerate(iterable):
        elm = k
        while elm <= len(iterable):
            data = iterable[k:elm]
            elm += 1
            if data:
                yield data

combs = list(get_combs([0, 1, 2, 3]))
print(combs)

输出:

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

相关问题 更多 >