417 Stimmen

Wie prüft man in Python, ob eine Zeichenkette ein Element aus einer Liste enthält?

Ich habe etwas Ähnliches:

extensionsToCheck = ['.pdf', '.doc', '.xls']

for extension in extensionsToCheck:
    if extension in url_string:
        print(url_string)

Ich frage mich, was wäre der elegantere Weg, dies in Python zu tun (ohne die for-Schleife)? Ich dachte an so etwas (wie von C/C++), aber es hat nicht funktioniert:

if ('.pdf' or '.doc' or '.xls') in url_string:
    print(url_string)

Edit: Ich bin irgendwie gezwungen zu erklären, wie sich dies von der Frage unten unterscheidet, die als potenzielles Duplikat markiert ist (damit sie nicht geschlossen wird, nehme ich an).

Der Unterschied besteht darin, dass ich prüfen wollte, ob eine Zeichenkette Teil einer Liste von Zeichenketten ist, während die andere Frage darin besteht zu prüfen, ob eine Zeichenkette aus einer Liste von Zeichenketten eine Teilzeichenkette einer anderen Zeichenkette ist. Ähnlich, aber nicht ganz dasselbe, und die Semantik spielt eine Rolle, wenn man online nach einer Antwort sucht, IMHO. Diese beiden Fragen zielen eigentlich auf die Lösung des entgegengesetzten Problems ab. Die Lösung für beide ist jedoch dieselbe.

745voto

Lauritz V. Thaulow Punkte 45363

Verwenden Sie einen Generator zusammen mit any der auf dem ersten True einen Kurzschluss verursacht:

if any(ext in url_string for ext in extensionsToCheck):
    print(url_string)

EDIT: Wie ich sehe, wurde diese Antwort von OP akzeptiert. Obwohl meine Lösung "gut genug" Lösung für sein spezielles Problem sein kann, und ist ein guter allgemeiner Weg, um zu überprüfen, ob alle Zeichenfolgen in einer Liste in einer anderen Zeichenfolge gefunden werden, denken Sie daran, dass dies alles ist, dass diese Lösung tut. Es spielt keine Rolle, WO die Zeichenfolge gefunden wird, z. B. am Ende der Zeichenfolge . Wenn dies wichtig ist, wie es oft bei Urls der Fall ist, sollten Sie sich die Antwort von @Wladimir Palant ansehen, sonst riskieren Sie falsch positive Ergebnisse.

83voto

eumiro Punkte 193562
extensionsToCheck = ('.pdf', '.doc', '.xls')

'test.doc'.endswith(extensionsToCheck)   # returns True

'test.jpg'.endswith(extensionsToCheck)   # returns False

29voto

Wladimir Palant Punkte 55387

Es ist besser, die URL richtig zu analysieren - auf diese Weise können Sie mit http://.../file.doc?foo y http://.../foo.doc/file.exe richtig.

from urlparse import urlparse
import os
path = urlparse(url_string).path
ext = os.path.splitext(path)[1]
if ext in extensionsToCheck:
  print(url_string)

10voto

psun Punkte 555

Verwenden Sie Listenauflösungen, wenn Sie eine einzeilige Lösung wünschen. Der folgende Code gibt eine Liste zurück, die den url_string enthält, wenn er die Erweiterungen .doc, .pdf und .xls hat, oder eine leere Liste, wenn er die Erweiterung nicht enthält.

print [url_string for extension in extensionsToCheck if(extension in url_string)]

HINWEIS: Dies dient nur dazu, zu prüfen, ob sie enthalten ist oder nicht, und ist nicht nützlich, wenn man das genaue Wort extrahieren will, das den Erweiterungen entspricht.

9voto

Aidos Punkte 699

Nur für den Fall, dass jemand wieder mit dieser Aufgabe konfrontiert wird, hier eine weitere Lösung:

extensionsToCheck = ['.pdf', '.doc', '.xls']
url_string = 'file.doc'
res = [ele for ele in extensionsToCheck if(ele in url_string)]
print(bool(res))
> True

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X