2016-01-14 82 views
6

我知道我可以使用拆分列表分成大小相同的子列表:如何將子列表拆分爲子列表k次? (蟒蛇)

segment = len(list)//k 
sub_lists = [list[i:i+segment] for i in range(0, len(list), segment)] 

但是我不知道怎麼的長度K^M列表分成子列表,再往子列表,直到每個子列表有1

例如長度:

k = 2 
list = [1, 2, 3, 4, 5, 6, 7, 8] 
list = [[1, 2, 3, 4], [5, 6, 7, 8]] 
list = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] 
list = [[[[1], [2]], [[3], [4]]], [[[5], [6]], [[7], [8]]]] 

每當我試圖循環這個我在海里獲得並列,有沒有捷徑?

+0

你想每個列表分成'k'子列表,對吧? – Finwood

+0

是的,基本上。如果不是很清楚,我很抱歉。 – Anna

+2

只是出於好奇,這是一個學術活動,還是你有一些目標? –

回答

4

這基本上是你的代碼:

def split_list(input_list, segments): 
    if len(input_list) == 1: 
     return input_list 
    segment_length = len(input_list) // segments 
    return [split_list(input_list[i:i+segment_length], segments) 
      for i in range(0, len(input_list), segment_length)] 

>>> split_list([1, 2, 3, 4, 5, 6, 7, 8], 2) 
[[[[1], [2]], [[3], [4]]], [[[5], [6]], [[7], [8]]]] 
+0

這完美地回答了我的問題,謝謝! – Anna

3
def sub_k_list(a, k): 
    p = len(a) // k 
    return a if not p else [sub_k_list(a[:p], k), sub_k_list(a[p:], k)] 

k = 2 
a = [1, 2, 3, 4, 5, 6, 7, 8] 

print(sub_k_list(a, k)) 

結果:

[[[[1], [2]], [[3], [4]]], [[[5], [6]], [[7], [8]]]] 

編輯:刪除if ...

def sub_k_list(a, k): 
    p = len(a) // k 
    return a * (not p) or [sub_k_list(a[:p], k), sub_k_list(a[p:], k)]