嗨,我正在尝试列出另一个列表的所有可能的内聚组合,因此我想从[0,1,2,3]中获得[[0],[0、1],[ 0、1、2],[0、1、2、3],[1],[1、2],[1、2、3],[2],[2、3],[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],[2、3],[3]]。
我在做什么错了?
答案 0 :(得分:0)
subArray
是您在for循环中修改的列表。追加到列表时,您不会创建新列表,而是对其进行了修改,然后将其再次放入列表中,因此最终将获得包含同一列表的多个副本的结果。比较这段代码:
a = []
b = [5]
a.append(b)
b.append(1)
a.append(b)
print(a)
将输出:
[[5, 1], [5, 1]]
答案 1 :(得分:0)
以下是使用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]]