Angenommen, ich möchte das erste Element, das dritte bis 200ste Element und das 201. Element durch das letzte Element nach Schrittgröße 3 aus einer Liste in Python.
Eine Möglichkeit, dies zu tun, ist die getrennte Indizierung und Verkettung:
%Vor% Gibt es eine Möglichkeit, dies mit nur einem Index für old_list
zu tun? Ich möchte etwas wie das Folgende (Ich weiß, dass dies syntaktisch nicht funktioniert, da Listenindizes keine Listen sein können und da Python leider hat keine Slice-Literale ; ich suche nur etwas in der Nähe):
Ich kann einiges erreichen, indem ich auf NumPy-Arrays umschalte, aber ich bin mehr daran interessiert, wie man das für native Python-Listen macht. Ich könnte auch einen Scheibenhersteller oder etwas ähnliches und möglicherweise auch erstellen starker Arm, der mir ein äquivalentes Scheibenobjekt gibt, um die Zusammensetzung aller meiner gewünschten Scheiben darzustellen.
Aber ich suche nach etwas, das keine neue Klasse zum Verwalten der Slices enthält. Ich möchte nur die Slice-Syntax verketten und diese zu meiner Liste führen und die Liste verstehen lassen, dass es bedeutet, die Slices separat zu erhalten und ihre jeweiligen Ergebnisse am Ende zu verketten.
Ein Slice-Maker-Objekt (z. B. SliceMaker
von Ihrer anderen Frage oder np.s_
) kann mehrere durch Kommas getrennte Slices akzeptieren. Sie werden als tuple
von slice
s oder anderen Objekten empfangen:
NumPy verwendet dies für mehrdimensionale Arrays, aber Sie können es für die Slice-Verkettung verwenden:
%Vor%Sie schreiben wahrscheinlich Ihren eigenen Sequenztyp besser.
%Vor%Und damit Sie anfangen können:
%Vor%Nicht sicher, ob das "besser" ist, aber es funktioniert so warum nicht ...
[y for x in [old_list[slice(*a)] for a in ((0,1),(3,201),(201,None,3))] for y in x]
Es ist wahrscheinlich langsam (besonders im Vergleich zur Kette), aber es ist einfach Python (3.5.2 zum Testen verwendet)