首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出所有连续的子阵列

列出所有连续的子阵列
EN

Stack Overflow用户
提问于 2017-01-11 03:34:00
回答 5查看 14.2K关注 0票数 10

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

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-11 03:43:01

简化Inspector的解决方案:

代码语言:javascript
复制
def getAllWindows(L):
    for w in range(1, len(L)+1):
        for i in range(len(L)-w+1):
            yield L[i:i+w]

和一个根本不使用循环的解决方案:

代码语言:javascript
复制
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)
票数 6
EN

Stack Overflow用户

发布于 2017-01-11 03:47:12

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

代码语言:javascript
复制
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)]

你得到了,

代码语言:javascript
复制
[[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]]
票数 12
EN

Stack Overflow用户

发布于 2017-01-11 03:36:55

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
In [39]: for i in getAllWindows([1,2,3]): print(i)
[1]
[2]
[3]
[1, 2]
[2, 3]
[1, 2, 3]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41576911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档