列出所有连续的子阵列

时间:2017-01-10 19:34:00

标签: python arrays python-3.x

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

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

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

5 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

简化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)

答案 2 :(得分:4)

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]

答案 3 :(得分:2)

基于data.frame(Num_element = Num_element, Num_unique = Num_unique, Num_table = sapply(Num_table, function(x) paste(names(x), x, collapse=' '))) # Num_element Num_unique Num_table #1 4 4 a 1 b 1 c 1 d 1 #2 2 1 a 2 #3 1 1 b 1 #4 3 2 a 1 c 2 的方法:

itertools

例如:

import itertools

def allSubArrays(xs):
    n = len(xs)
    indices = list(range(n+1))
    for i,j in itertools.combinations(indices,2):
        yield xs[i:j]

答案 4 :(得分:0)

li=[1,2,3]
l=[]
for i in range(length(li)):
    for j in range(i,len(li)+1):
        if i==j:                   *cancelling empty sublist item*
            continue
        else:
            subli=li[i:j]
            l.append(subli)
 print(l)

输出:

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