列出所有相邻子阵列

2024-04-25 09:22:27 发布

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

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

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

我怎么用python处理呢?一种方法是有两个循环和数组本身,但应该有更好的方法。


Tags: 方法整数数组
3条回答
def kwindow(L, k):
    for i in range(len(L)-k+1):
        yield L[i:i+k]


def getAllWindows(L):
    for w in range(1, len(L)+1):
        yield from kwindow(L, w)

输出:

In [39]: for i in getAllWindows([1,2,3]): print(i)
[1]
[2]
[3]
[1, 2]
[2, 3]
[1, 2, 3]

简化检查员的解决方案:

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)

单行解决方案(我不知道什么对你来说是“更好的方式”)

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]]

相关问题 更多 >