2017-07-07 6 views
-2

Ich arbeite mit Python 2.4 und ich muss die Funktion verwenden, die nicht in meiner Python-Version verfügbar ist.Python: alternative Art der eingebauten Funktion "any"

Gibt es eine Funktion oder einen Ausdruck, die ich verwenden kann, um es zu ersetzen?

Ich muss herausfinden, ob mindestens ein Element einer String-Liste in einer Textzeile ist.

+2

Es gibt ein Äquivalent Version in der Dokumentation selbst: https://docs.python.org/3/library/functions.html#any –

+0

Ok danke. Aber ich bin mir nicht sicher, wie ich es benutzen soll. Meine Liste enthält Strings, keine booleschen Werte. – tsumey

+2

Es ist Zeit, Ihre Python-Version zu aktualisieren –

Antwort

0

Die Funktion any ist relativ einfach zu implementieren.

Die Idee ist nur, über eine iterable zu iterieren, und sobald ein truthy Objekt gefunden wird, zurückgeben True; sonst gib Falsch zurück.

ohne betrügen und an dem doc späht, hier ist eine Neuimplementierung:

def my_any(iterable): 
    for it_element in iterable: 
     if it_element: 
      return True 
    return False 

Jetzt mit the doc's version:

def any(iterable): 
    for element in iterable: 
     if element: 
      return True 
    return False 

Es ist so einfach, meine Version ist genau das gleiche wie die doc .

Informationen zur Verwendung ... Die Funktion any ist iterierbar. Es wird im Allgemeinen entweder mit einer Liste oder einem Generatorausdruck verwendet. Zum Beispiel, wenn Sie, wenn irgendein Zeichen von 'abcd' im line String überprüfen mögen:

any(it_character in line for it_character in 'abcd') 
+0

Danke, Aber ich arbeite mit Millionen von Zeilen und ich suchte nach einer nicht zeitaufwendigen Möglichkeit, dies zu tun; Die Verwendung einer Schleife scheint nicht der beste Weg zu sein. Ich könnte falsch liegen. – tsumey

+1

@tsumey Nun, Ihre spezielle Frage bezieht sich auf die Methode 'any', also bitte. Wenn Sie nun eine Pettern in einer großen Datei finden wollen, müssen Sie wahrscheinlich trotzdem darüber iterieren, so dass eine Schleife notwendig ist. Keine magische Funktion sagt dir "es ist in Zeile 125,327" ohne Iteration. –

+0

Ok, ich werde die Doc-Lösung verwenden, danke. – tsumey

1

Für Ihren spezifischen Anwendungsfall (die „Pause“ ist optional):

ans = False 
for string in lst: 
    if string in line: 
     ans = True 
     break 
+0

Vielen Dank, bitte werfen Sie einen Blick auf meine Antwort auf @Right Bein. – tsumey

+1

Die Funktion "any" führt grundsätzlich eine Schleife aus, obwohl sie möglicherweise optimiert wurde. Auf irgendeiner Ebene müssen Sie sich jeden String in der Liste ansehen (zumindest bis Sie einen gefunden haben, der funktioniert), also ist etwas Loop-ähnliches notwendig. Die Pause lässt Sie früh beenden, wenn eine Übereinstimmung gefunden wird. – perigon

Verwandte Themen