2016-01-14 17 views
6

So che posso dividere una lista in sotto-liste di uguali dimensioni utilizzando:Come dividere le sotto-liste in sotto-liste k volte? (Python)

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

Tuttavia io non sono sicuro di come dividere una lista di lunghezza k^m in sotto-liste, poi ulteriormente sotto-liste fino a quando ogni sub-lista ha lunghezza 1.

ad esempio:

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

ogni volta che ho provato a ciclo questo vengo legata in nodi, c'è una scorciatoia?

+0

si desidera dividere ciascuna lista in sottotitoli 'k', giusto? – Finwood

+0

Sì, in sostanza. Mi dispiace se non fosse così chiaro. – Anna

+2

Solo per curiosità, si tratta di un esercizio accademico, o c'è qualche obiettivo che hai in mente? –

risposta

4

Questo è essenzialmente il tuo codice:

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

Questo risponde perfettamente alla mia domanda, grazie! – 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)) 

Risultato:

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

Edit: rimuovere il se ...

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