2017-04-26 54 views
0

给出一个列表,例如。 [2,3,4,10,20,30,102] 我需要所有可能的块/长度3如下子列表,Python中所有可能的列表大小

[[2, 3, 4], [3, 4, 10], [4, 10, 20], [10, 20, 30], [20, 30, 102]] 
+0

的[?我怎样才能找到一个集合的所有子集,与正好n个元素(可能的复制HTTP ://stackoverflow.com/questions/374626/how-can-i-find-all-the-subsets-of-a-set-with-exactly-n-elements) – CaptainTrunky

+0

@CaptainTrunky这绝对不是重复的关联的问题。这是关于连续的子序列而不是子集。 –

+0

我从这个问题收回国旗,抱歉的错误。 – CaptainTrunky

回答

2

这将做的工作:

l= [2,3,4,10,20,30,102] 
res=[l[i:i+3] for i in range(len(l)-2)] 
print(res) 

这将打印

[[2, 3, 4], [3, 4, 10], [4, 10, 20], [10, 20, 30], [20, 30, 102]] 
+0

由于您的代码较短且经过优化,因此我接受您的答案。 –

0
arr = [2,3,4,10,20,30,102] 
arr2 = arr 
arr3 =[] 
while (len(arr2) >= 3): 
    arr4=arr2[:3] 
    arr2 = arr2[1:] 
    arr3.append(arr4) 
print("Original List \n") 
print(arr) 
print("\n") 
print("List with all the chunks \n") 
print(arr3) 
2

此功能将做的工作,更

def chunks(sequence, length): 
    sub_sequences = [sequence[offset:] 
        for offset in range(length)] 
    return zip(*sub_sequences) 

您例如

list(chunks([2, 3, 4, 10, 20, 30, 102], length=3)) 

给出所需的输出

+0

感谢您为您+1的努力。 –

1

使用list comprehensionxrange操作会做你的忙。

样本输出

>>> a = [2,3,4,10,20,30,102] 

>>> max_len = 3 
>>> [ a[i-max_len: i] for i in xrange(max_len, len(a))] 
[[2, 3, 4], [3, 4, 10], [4, 10, 20], [10, 20, 30]] 

>>> max_len = 5 
>>> [ a[i-max_len: i] for i in xrange(max_len, len(a))] 
[[2, 3, 4, 10, 20], [3, 4, 10, 20, 30]] 
0

最简单的方法是使用切片:

>>> s = [2, 3, 4, 10, 20, 30, 102] 
>>> [s[i:i+3] for i in range(0, len(s)-2)] 
[[2, 3, 4], [3, 4, 10], [4, 10, 20], [10, 20, 30], [20, 30, 102]] 
相关问题