2017-08-02 6 views
1

Comment créer une liste 2D à partir d'une liste 1D avec une ligne et des cols donnés?Créer une liste 2d à partir d'une liste 1d avec une longueur et une largeur données?

Vu:

sample_list=[5, 2, 3, 4, 1, 6, 1, 6, 7, 2, 3] 

row=2 
cols=4 

Il devrait retourner ceci:

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

Je ne ai pas besoin d'autres chiffres = 7, 2, 3. Je veux juste une liste qui a rang et Col. quel utilisateur donne. Ma solution ne retourne pas ce que je veux,

Ma solution:

def 1D_to_2D(sample_list, row, cols): 
    return [sample_list[i:i+cols] for i in range(0, len(sample_list), rows)] 

retours:

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

Tout le monde peut aider?

Répondre

1

Juste Trancher votre liste à l'aide d'une compréhension de liste avec range et une étape de cols (non rows que vous avez utilisé), et limiter le nombre d'éléments à l'aide tranchage externe avec rows:

sample_list=[5, 2, 3, 4, 1, 6, 1, 6, 7, 2, 3] 
rows=2 
cols=4 

result = [sample_list[x:x+cols] for x in range(0,len(sample_list),cols)][:rows] 

Résultat:

[[5, 2, 3, 4], [1, 6, 1, 6]] 
+0

oui. mais la réponse acceptée ne tronque pas la liste, elle s'arrête juste au bon moment, donc c'est légèrement mieux (eh bien, on aurait pu faire plus d'explications, le code n'est pas tout!) –

+0

note que je ne disais pas ça à obtenez l'acceptation de la réponse de votre part. –

+0

ouais je connais l'homme! mais vous le méritez :) –

1
def D_to_2D(sample_list, rows, cols): 
    return [sample_list[cols*i: cols*(i+1)] for i in range(rows)] 

>>> D_to_2D([5, 2, 3, 4, 1, 6, 1, 6, 7, 2, 3], 2, 4) 
[[5, 2, 3, 4], [1, 6, 1, 6]] 
0
f = lambda x, row, cols: [x[i:i+cols] for i in range(0, cols*row, cols)] 
f(x, row, cols) 
+0

Qu'est-ce que cela renvoie? Je pense que le contexte de votre réponse serait en place ici –

+0

Il renvoie la réponse voulue – Reza