2016-01-14 48 views
6

Ich weiß, dass ich eine Liste in Teillisten von gleicher Größe mit aufspalten:Wie kann man Unterlisten k-mal in Unterlisten aufteilen? (Python)

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

aber ich bin nicht sicher, wie eine Liste der Länge k^m in Unterlisten aufgeteilt, dann weitere Unterlisten, bis jede Unterliste Länge von 1.

zum Beispiel hat:

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

jedes Mal, wenn ich in einer Schleife versucht habe dies ich in Knoten gebunden bekommen, gibt es eine Abkürzung?

+0

Sie jede Liste teilen möchten in 'k' Unterlisten, oder? – Finwood

+0

Ja, im Wesentlichen. Es tut mir leid, wenn es nicht so klar war. – Anna

+2

Nur aus Neugier, ist dies eine akademische Übung, oder gibt es ein Ziel, das Sie im Sinn haben? –

Antwort

4

Dies ist im Wesentlichen Code:

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

Dies beantwortet meine Frage perfekt, danke! – 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)) 

Ergebnis:

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

Edit: entfernen Sie das, wenn ...

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)] 
Verwandte Themen