Ich bin neu bei Python und habe meine Suche durchgeführt, aber ich konnte nicht finden, wonach ich suche. Ich entschuldige mich im Voraus, wenn diese Frage gestellt wurde und ich sie nicht finden konnte, weil ich den Namen dessen, was ich erreichen wollte, nicht kannte. Ich lese gern jedes Dokument, das Sie vorschlagen könnten.
Ich habe eine Liste von Listen. z.B. = & gt; [int, 'str']
%Vor% Ich möchte herausfinden, ob a str
in der Indexposition (1) einer der Listen von Liste t existiert.
Ich kann dies mit einer Funktion tun, die 2 for- oder while-Schleifen enthält, aber was ich suche, ist, dies möglichst mit einer einzigen Iteration zu erreichen. Ich möchte die kürzeste Funktion lernen.
for input str('str_3'), I want to get int(2)
(Index der Liste, die str_3 an ihrem eigenen ersten Indexstandort hat)
für str_1 möchte ich int (0) erhalten
und für str_1234 Ich möchte Falsch erhalten, da es in keiner der Listen in list t
Als Neuling würde ich normalerweise tun:
%Vor%Was ich erreichen will, ist, wenn möglich, ein besserer und kürzerer Weg, um dies in einer Zeile eines Codes zu erreichen oder einfach nur zu lernen, ob es einen klüger, besseren oder pythischeren Weg gibt, als irgendjemand von euch ist sicherlich erfahrener würde empfehlen.
Danke
Erläuterung:
%Vor%Dies wird alle übereinstimmenden Indizes zurückgeben, da es mehr als eins geben kann.
Wenn Sie wissen, dass es nur einen Index gibt, kann ich vorschlagen, ein Dict anstelle einer verschachtelten Liste zu verwenden? Mit einem Dict können Sie Elemente in konstanter Zeit mit einer sehr einfachen Syntax suchen, anstatt iterieren zu müssen.
%Vor% Verwenden Sie die Funktion any
mit einem Generatorausdruck:
Dies ist Schleife über t
, und für jede el
in t
testen wir, ob der zweite Wert darin gleich str_1
ist, genau wie Ihre Schleife.
Aber es wird das nur tun, bis es ein Element findet, für das das wahr ist, dann stoppe und gibt True
zurück. Wenn ein solches Element nicht gefunden wird, wird stattdessen False
zurückgegeben.
Wenn Sie stattdessen nicht nur das Vorhandensein von str_1
testen möchten, sondern auch wissen möchten, wo es sich befindet, ist die effizienteste Methode die Verwendung einer Schleife wie bei Ihnen. Sie können enumerate
verwenden, um Ihnen den Index und den Wert in einer Sequenz zu geben:
Das Beispiel einer for-Schleife, die Sie verwenden, ist nicht die übliche Art, in python for-Schleifen zu verwenden, weil die for-Schleife kein numerisches Konstrukt ist (wie es in den meisten Sprachen der Fall ist), sondern eine Art, einen Schleifenkörper anzuwenden zu jedem Element, das durch Iteration der angegebenen Sammlung erhalten wird.
Der normale Weg (mit einer Schleife), um den Index zu finden, wäre:
%Vor% Beachten Sie, dass in diesem Fall die Sequenzzuweisung verwendet wird, um die Elemente jeder Liste mit zwei Elementen separaten Variablen zuzuweisen. Probieren Sie die Funktion enumerate
selbst in der Python-Shell aus, um herauszufinden, was sie tut.
Wenn Ihre Liste sortiert ist, können Sie stattdessen bisect
: Ссылка
Wenn Sie nur herausfinden wollen, ob es ein Paar gibt, das Ihrer Bedingung entspricht und Sie sich nicht um den Index kümmern, verwenden Sie any
, was die Iteration stoppt, sobald eine Übereinstimmung gefunden wird:
Der Ausdruck in any
ist ein Generatorausdruck , der True
oder False
für jedes Element in t liefert.
Betrachten Sie abschließend, ob dies die am besten geeignete Datenstruktur ist.
Lassen Sie uns zunächst eine tatsächliche Datenstruktur ähnlich der von Ihnen beschriebenen verwenden:
%Vor%Erstellen Sie nun eine Liste von Tupeln für jedes Element, das dem Test von gleich 'str_5'
entspricht %Vor%Testen Sie jetzt mit einer Zeichenfolge, die nicht vorhanden ist:
%Vor%Es ist dann einfach, Präsenz zu testen, das Auftreten zu zählen und die benötigten Items zu extrahieren:
%Vor% Wie andere bereits gesagt haben, könnten Sie Ihre Datenstruktur ändern. Behalten Sie int_x
als Index? Tu das nicht. Verwenden Sie eine Liste der Zeichenfolgen und zähle auf. Wenn es sich nur um eine Zuordnung zwischen str_x und int_x handelt, verwenden Sie ein Wörterbuch.
Tags und Links python python-2.7