2017-03-29 3 views
3

Angenommen, Sie haben eine Liste [1,2,3,...,99,100]Wie kann ich eine Liste in Scheiben schneiden, um alle zwei aufeinanderfolgenden Elemente der Liste in neue Listen zu bekommen?

import numpy as np 
ls = np.linspace(1,100,100) 

Sie mit dem Slice-Notation sagen herumzudaddeln diejenigen zu finden, die für Sie arbeitet.

print(ls[:2]) 
>> [ 1. 2.] 

print(ls[::2]) 
>> [ 1. 3. 5. 7. ... 97. 99.] 

Wie kann ich in Scheiben schneiden die Daten in einer Weise, dass ich

[1,2],[3,4],[5,6],[7,8],...,[99,100] 

## vielleicht nicht wichtig zu bekommen, aber mein Ziel ist es, dies zu meinem Datensatz anpassen, wobei die Werte in den Listen bezeichnen der numerische Index einer anderen Liste von Werten (other_values ​​[index]), die verglichen werden sollen. Ist es möglich, Slicing mit Arrays zu kombinieren?

Antwort

5

können Sie die für die .resize(..,2) Option verwenden. Das Ergebnis ist, dass ls ist nun ein numpy Array mit 50 × 2 Dimensionen:

>>> ls.resize(ls.shape[0]/2,2) 
>>> ls 
array([[ 1., 2.], 
     [ 3., 4.], 
     [ 5., 6.], 
     [ 7., 8.], 
     [ 9., 10.], 
     [ 11., 12.], 
     [ 13., 14.], 
     [ 15., 16.], 
     [ 17., 18.], 
     [ 19., 20.], 
     [ 21., 22.], 
     [ 23., 24.], 
     [ 25., 26.], 
     [ 27., 28.], 
     [ 29., 30.], 
     [ 31., 32.], 
     [ 33., 34.], 
     [ 35., 36.], 
     [ 37., 38.], 
     [ 39., 40.], 
     [ 41., 42.], 
     [ 43., 44.], 
     [ 45., 46.], 
     [ 47., 48.], 
     [ 49., 50.], 
     [ 51., 52.], 
     [ 53., 54.], 
     [ 55., 56.], 
     [ 57., 58.], 
     [ 59., 60.], 
     [ 61., 62.], 
     [ 63., 64.], 
     [ 65., 66.], 
     [ 67., 68.], 
     [ 69., 70.], 
     [ 71., 72.], 
     [ 73., 74.], 
     [ 75., 76.], 
     [ 77., 78.], 
     [ 79., 80.], 
     [ 81., 82.], 
     [ 83., 84.], 
     [ 85., 86.], 
     [ 87., 88.], 
     [ 89., 90.], 
     [ 91., 92.], 
     [ 93., 94.], 
     [ 95., 96.], 
     [ 97., 98.], 
     [ 99., 100.]]) 
+0

Das ist perfekt. Ich kann das Muster wiederholen, um iterativ mein Fenster von Indizes 'ls.resize (ls.shape [0]/2,4) ls.resize (ls.shape [0]/2,8)' – mikey

+0

@mikey zu ändern: Ja. Obwohl der letzte Aufruf seit 100 fehlschlagen wird nicht teilbaren ist 8. –

+0

Ich versuche, diese Operation der return-Anweisung für eine Funktion zu machen, sind die Eingänge, von denen eine Liste 'ls' und die Anzahl der gewünschten Spalten' num_col' (' num_col = 2' aus Ihrem Beispiel). Ich kann das Ergebnis außerhalb der Funktion erhalten, aber nicht mit der Funktion. Ist das ein häufiges Problem? – mikey

2

so etwas wie

list(zip(l[::2], l[1::2])) 

gibt eine Liste von Tupeln mit Ihrer gewünschten Paarung

Verwandte Themen