Komplexer Listenausschnitt / Index in Python

8

Ich habe eine Liste, die so aussieht:

%Vor%

Ich möchte eine gefilterte Liste erstellen, die wie folgt aussieht:

%Vor%

Enthält Python eine Konvention für das benutzerdefinierte Slicen? Etwas wie:

%Vor%     
turtle 01.01.2013, 21:59
quelle

5 Antworten

16

Verwenden Sie operator.itemgetter() :

%Vor%

Demo:

%Vor%

Dies gibt ein Tupel zurück; Wird in eine Liste mit list(itemgetter(...)(lst)) umgewandelt, wenn dies eine Voraussetzung ist.

Beachten Sie, dass dies einem Schnittausdruck ( lst[start:stop] ) mit einer Reihe von Indizes anstelle eines Bereichs entspricht. es kann nicht als eine linksseitige Slice-Zuweisung ( lst[start:stop] = some_iterable ) verwendet werden.

    
Martijn Pieters 01.01.2013, 22:01
quelle
5

Numpy-Arrays haben diese Art von Slicing-Syntax:

%Vor%     
unutbu 01.01.2013 22:08
quelle
1

Es ist einfach und unkompliziert mit einem Listenverständnis gemacht.

%Vor%     
Paul Hankin 01.01.2013 22:20
quelle
1

Ich würde mit der operator.itemgetter() -Methode gehen, die Martijn Pieters vorgeschlagen hat, aber hier ist ein anderer Weg (der Vollständigkeit halber)

%Vor%     
inspectorG4dget 01.01.2013 22:05
quelle
0

Mit einem Python-Slice können Sie das Slice zum Ziel einer Aufgabe machen. Und die Python-Slicing-Syntax erlaubt keine Slices mit unregelmäßigen Mustern von Indizes. Wenn Sie also Ihre "benutzerdefinierte" Schicht zum Ziel einer Zuweisung machen wollen, ist das mit der Python-Slice-Syntax nicht möglich.

Wenn Ihre Anforderungen erfüllt sind, indem Sie eine Kopie der angegebenen Elemente erstellen, erfüllt operator.itemgetter() Ihre Anforderungen. Wenn Sie eine Slice-Zuweisung benötigen, sind numpige Slices eine gute Option.

    
David Heffernan 01.01.2013 22:12
quelle

Tags und Links