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 ...
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:
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.
Mit enumerate()
könnten Sie eine Funktion wie diese schreiben:
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%