列出所有连续的子数组

新手上路,请多包涵

我有一个整数数组 [1, 2, 3] ,我需要返回该数组的连续子数组的所有可能组合。

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

我该如何用 python 处理它?一种方法是有 2 个循环和数组本身,但应该有更好的方法。

原文由 Michael 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

简化 Inspector 的解决方案:

 def getAllWindows(L):
    for w in range(1, len(L)+1):
        for i in range(len(L)-w+1):
            yield L[i:i+w]

一个完全不使用循环的解决方案:

 def allSubArrays(L,L2=None):
    if L2==None:
        L2 = L[:-1]
    if L==[]:
        if L2==[]:
            return []
        return allSubArrays(L2,L2[:-1])
    return [L]+allSubArrays(L[1:],L2)

原文由 Scott Hunter 发布,翻译遵循 CC BY-SA 3.0 许可协议

一线解决方案(我不知道对你来说“更好的方式”是什么意思)

 L = [1,2,3]
[L[i:i+j] for i in range(0,len(L)) for j in range(1,len(L)-i+1)]

L=[1,2,3,4]
[L[i:i+j] for i in range(0,len(L)) for j in range(1,len(L)-i+1)]

你得到,

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

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

原文由 Jose Ricardo Bustos M. 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏