Wie kann ich wissen, welches Element in einer Liste eine any () -Funktion ausgelöst hat?

7

Ich entwickle ein Python-Programm, um Namen von Städten in einer Liste von Datensätzen zu erkennen. Der Code, den ich bisher entwickelt habe, ist folgender:

%Vor%

Der Code funktioniert gut, um zu erkennen, wenn eine Stadt in der aCities-Liste im Buchhaltungsdatensatz gefunden wird, aber da die Funktion any () nur Wahr oder Falsch zurückgibt. Ich habe Mühe zu erfahren, welche Stadt (Melbourne, Sydney, Perth, Dubai oder London) den Ausgang ausgelöst.

Ich habe versucht mit aCities.index und Queue aber bisher keinen Erfolg.

    
Luis U. 01.08.2015, 07:04
quelle

4 Antworten

10

Ich denke nicht, dass es mit any möglich ist. Sie können next mit dem Standardwert verwenden:

%Vor%     
falsetru 01.08.2015, 07:08
quelle
4

Sie werden nicht, weil any nur einen booleschen Wert zurückgibt. Aber Sie können next verwenden:

%Vor%

Mit dieser Syntax finden Sie die erste city , die eine Teilzeichenkette der in der Datenbankzeile gespeicherten Beschreibung ist. Wenn es keinen gibt, ist der zweite Parameter z.B. Keine, wird zurückgegeben.

    
JuniorCompressor 01.08.2015 07:08
quelle
3

Nein, es ist mit any möglich. Es ist ein bisschen ein Trick - es "liest lustig" - aber es funktioniert:

%Vor%

oder prägnanter, wenn Sie wirklich nur die Stadt ausdrucken möchten:

%Vor%

Es funktioniert aus drei Gründen:

  1. any stoppt beim ersten wahren (truthigen) Element,
  2. and ist kurzgeschlossen, daher wird not print(city) nur ausgewertet, wenn city in row[0] wahr ist, und
  3. print gibt None zurück, also not print(...) ist immer True .

PS: Wie @falsetru darauf hinweist, ist in% Python 2.x print keine Funktion, also müssen Sie zuerst sagen:

%Vor%

Wie gesagt, es funktioniert aus 3 Gründen - Python 3 Gründe;) Oh, warte - das sind 4 Gründe ...

    
BrianO 01.08.2015 07:45
quelle
1

Der Vollständigkeit halber ist hier eine Lösung mit einer Standard-for-Schleife:

%Vor%

Dies sollte das gleiche Kurzschlussverhalten wie any haben, da es bei Erfüllung der Bedingung aus der for-Schleife ausbricht. Der else -Teil wird ausgeführt, wenn die for-Schleife bis zum Ende läuft, ohne zu brechen, siehe diese Frage .

>

Obwohl diese Lösung mehr Zeilen verwendet, verwendet sie tatsächlich weniger Zeichen als die anderen Lösungen, da es keinen Aufruf für next(..., None) gibt, sie nicht die zusätzliche city = Zuweisung hat und es keine zweite if city is None (at die Kosten von einem zusätzlichen break ). Wenn die Dinge komplizierter werden, ist es manchmal klarer, die for-Schleife explizit auszugeben und dann einige Generator-Ausdrücke und next -Anweisungen zusammenzufassen.

    
Bas Swinckels 01.08.2015 08:57
quelle

Tags und Links