@mickimick: Wenn Du die `nan`-Werte wie gezeigt aus `L` entfernen kannst, dann ist `L` schon mal keine Liste sondern sehr wahrscheinlich ein Numpy-Array. Dann sieht die Darstellung aber auch nicht *so* aus, denn `nan` kann nur in Arrays mit Gleitkommazahlen vorkommen. Was auch schön gewesen wäre wenn die Länge der Arrays der beschreibung im Text entspräche, denn `T` ist in dem Beispiel gar nicht 5 mal so lang wie `L`.
Du weisst ja offensichtlich wie man einen Index für `L` erstellt. Obwohl das noch etwas kürzer ginge, denn statt die Elemente mit `False` zu vergleichen um sie zu negieren kann man auch den ``~``-Operator verwenden: ``~isnan(L)``. Ich gehe jetzt mal davon aus, dass `T` auch ein Array ist und keine Liste. Dann kann man dort doch einfach die Form in ein 2D-Array ändern, den gleichen Index wie für `L` verwenden und das Ergebnis wieder „flach klopfen”. Wobei sich hier auch die Frage stellt warum das eine eindimensionale Struktur ist wenn jeweils fünf aufeinanderfolgende Werte mit einem Wert aus `L` korrespondieren. Das ist umständlich und führt genau zu solchen Fragen wie in diesem Beitrag.
Code: Alles auswählen
In [24]: L
Out[24]: array([ 1., nan, 12., 5., 324., nan])
In [25]: T
Out[25]:
array([ 1, 2, 1, 2, 3, 4, 5, 33, 42, 435, 643,
234, 123, 643, 234, 123, 52, 6, 4, 43, 634, 3234,
35, 12, 786, 43, 754, 85, 35, 6, 4, 2, 1,
6, 53])
In [26]: idx = ~np.isnan(L)
In [27]: L[idx]
Out[27]: array([ 1., 12., 5., 324.])
In [28]: T.reshape((5, None))
Out[28]:
array([[ 1, 2, 1, 2, 3, 4, 5],
[ 33, 42, 435, 643, 234, 123, 643],
[ 234, 123, 52, 6, 4, 43, 634],
[3234, 35, 12, 786, 43, 754, 85],
[ 35, 6, 4, 2, 1, 6, 53]])
In [29]: T.reshape((5, None))[idx]
Out[29]:
array([[ 1, 2, 1, 2, 3, 4, 5],
[ 234, 123, 52, 6, 4, 43, 634],
[3234, 35, 12, 786, 43, 754, 85],
[ 35, 6, 4, 2, 1, 6, 53]])
In [30]: T.reshape((5, None))[idx].flatten()
Out[30]:
array([ 1, 2, 1, 2, 3, 4, 5, 234, 123, 52, 6,
4, 43, 634, 3234, 35, 12, 786, 43, 754, 85, 35,
6, 4, 2, 1, 6, 53])