Python - finde den Index eines Gegenstandes in einer Liste von Listen

7

Ich habe eine Liste von Listen:

%Vor%

Was ist die sauberste Art, die Liste zu durchsuchen und die Position eines der Elemente, z. "#660000" ?

Ich habe mir die Indexmethode angesehen, aber das scheint die Liste in der Liste nicht zu entpacken.

%Vor%

gibt: ValueError: ['#660000'] is not in list , nicht [0][0] , wie ich es erwarte ...

    
Jay Gattuso 04.03.2012, 09:01
quelle

6 Antworten

11

Ich würde so etwas tun:

%Vor%

Dies gibt eine Liste von Tupeln zurück, wobei der erste Index die Position in der ersten Liste und der zweite Index die Position in der zweiten Liste ist (Hinweis: c ist die gesuchte Farbe, also "#660000" ).

Für das Beispiel in der Frage lautet der zurückgegebene Wert:

%Vor%

Wenn Sie nur die erste Position finden müssen, in der die Farbe auf faule Weise gefunden wird, können Sie dies verwenden:

%Vor%

Dies wird das Tupel für das erste gefundene Element oder None zurückgeben, wenn kein Element gefunden wird (Sie können auch das obige None Argument entfernen, es wird eine StopIteration Ausnahme ausgelöst, wenn kein Element gefunden wird).

Bearbeiten: Da @RikPoggi korrekt darauf hinweist, dass die Anzahl der Übereinstimmungen hoch ist, führt dies zu einem Mehraufwand, da colour zweimal durchlaufen wird, um c zu finden. Ich nahm an, dass dies für eine geringe Anzahl von Übereinstimmungen angemessen ist und eine Antwort in einem einzelnen Ausdruck hat. Um dies zu vermeiden, können Sie jedoch auch eine Methode definieren, die dieselbe Idee wie folgt verwendet:

%Vor%

Beachten Sie, dass find ein Generator ist, den Sie wie im obigen Beispiel mit next verwenden können, um bei der ersten Übereinstimmung zu stoppen und weiter zu suchen.

    
jcollado 04.03.2012, 09:06
quelle
8

Mit enumerate() könnten Sie eine Funktion wie diese schreiben:

%Vor%     
Rik Poggi 04.03.2012 09:10
quelle
4

Wenn Sie vermeiden wollen, die Ziel-Teilliste zweimal zu durchlaufen, scheint es, dass die beste (und am meisten pythonische) Methode eine Schleife ist:

%Vor%     
bereal 04.03.2012 09:11
quelle
3

Es wäre vielleicht einfacher, numpy :

%Vor%

Wie Sie sehen, erhalten Sie ein Tupel mit allen Zeilen- und Spaltenindizes.

    
Rik Poggi 04.03.2012 09:25
quelle
1

In Python 3 habe ich dieses Muster verwendet:

%Vor%     
Aaron Lelevier 02.02.2016 20:11
quelle
0

Eine andere Sache, die Sie tun können, ist, den Abschnitt der Liste auszuwählen, den Sie wollen, und dann den Index zu verwenden, um ihn zu finden

%Vor%     
Pedro Azevedo 29.11.2017 18:16
quelle

Tags und Links