我有一个整数的数组[1, 2, 3]
,我需要返回该数组的所有可能的连续子数组合。
[[1],[2],[3],[1,2],[2,3],[1,2,3]]
我如何使用python处理它?一种方法是拥有2个循环和数组本身,但应该有更好的方法。
答案 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]]