2017-04-26 14 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]] 
相關問題