2016-04-05 27 views
3

Ich muss eine Liste von Listen in Python zerschneiden.Slicing-Liste von Listen in Python

A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] 
idx = slice(0,4) 
B = A[:][idx] 

Der obige Code gibt mir nicht die richtige Ausgabe.

Was ich will, ist: [[1,2,3],[1,2,3],[1,2,3]]

+0

Wo Sie die Logik gesehen haben in Ihrer Frage verwendet wird? Warum würde 'slice (0,4)' Ihnen drei Elemente pro Unterliste geben, wenn es funktionieren sollte? –

Antwort

7

Mit numpy ist es sehr einfach - man konnte nur die Scheibe durchführen:

In [1]: import numpy as np 

In [2]: A = np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]) 

In [3]: A[:,:3] 
Out[3]: 
array([[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]]) 

Sie könnten natürlich auf die numpy.array zurückzuverwandeln list:

In [4]: A[:,:3].tolist() 
Out[4]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
+0

Ich würde sagen 'A [:,: 3] .tolist()' – MaxU

+0

@MaxU, aktualisiert, danke! – soon

1

Sie eine Liste Verständnis verwenden können, wie zum Beispiel: [x[0:i] for x in A] wo i 1,2,3 usw. auf, wie viele Elemente, die Sie benötigen.

+0

das sollte 'x [idx]' angesichts der OPs Code –

+0

Warum? Er benötigt die ersten idx-Elemente aus jeder Liste. – Sid

+0

@WayneWerner korrekt, aber ich änderte die Bedeutung von idx ... anstelle der Scheibe ist es ein roher Int – Sid

0

Entweder:

>>> [a[slice(0,3)] for a in A] 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 

Oder:

>>> [list(filter(lambda x: x<=3, a)) for a in A] 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
+1

Während das * das * OP-Problem löst, bezweifle ich, dass es das war, was sie wollten. –

+0

@WayneWerner siehe update plz :) – haifzhan

7

Sehr selten mit Segmentobjekte ist einfacher zu lesen als eine Liste Verständnis verwendet wird, und dies ist nicht einer jener Fälle.

>>> A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] 
>>> [sublist[:3] for sublist in A] 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 

Dies ist sehr klar. Für jede Unterliste in A, geben Sie mir die Liste der ersten vier Elemente.