Wie schreibt man den folgenden Code pythonisch?
extensions = ['.mp3','.avi']
file_name = 'test.mp3'
for extension in extensions:
if file_name.endswith(extension):
#do stuff
Ich habe eine vage Erinnerung daran, dass die explizite Deklaration der for
Schleife vermieden und in die if
Bedingung geschrieben werden kann. Ist das wahr?
if any((file_name.endswith(ext) for ext in extensions))
.Antworten:
Obwohl nicht allgemein bekannt, akzeptiert str.endswith auch ein Tupel. Sie müssen nicht schleifen.
quelle
import string; str.endswith(tuple(string.ascii_lowercase))
endswith
akzeptiert Tupel nur für Python 2.5 und höherBenutz einfach:
quelle
Nehmen Sie eine Erweiterung aus der Datei und prüfen Sie, ob sie in den Erweiterungen enthalten ist:
Verwenden eines Satzes, da die zeitliche Komplexität für die Suche in Sätzen O (1) ( docs ) beträgt .
quelle
.endswith()
mit einem internierten Tupel für relativ kurze Tupel schneller als eine festgelegte Suche{'.mp3','.avi'}
, die zusätzliche Typkonvertierung vermeidet und je nach Hintergrund möglicherweise besser lesbar ist ('Obwohl dies zu Verwechslungen mit Wörterbüchern führen kann und nicht zum Erstellen von leeren verwendet werden kann Sätze).Es gibt zwei Möglichkeiten: reguläre Ausdrücke und String (str) -Methoden.
String-Methoden sind normalerweise schneller (~ 2x).
792 ns ± 1,83 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 1000000 Schleifen)
274 ns ± 4,22 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 1000000 Schleifen)
quelle
Ich habe das:
quelle
return filename.endswith(ext)
? : PIch bin gerade darauf gestoßen, als ich nach etwas anderem gesucht habe.
Ich würde empfehlen, mit den Methoden im
os
Paket zu gehen . Dies liegt daran, dass Sie es allgemeiner gestalten können, um jeden seltsamen Fall zu kompensieren.Sie können so etwas tun wie:
quelle
Eine andere Möglichkeit könnte darin bestehen, die IN-Anweisung zu verwenden:
quelle
index
sollterindex
in diesem Fall sein.Eine andere Möglichkeit, die Liste der übereinstimmenden Zeichenfolgen zurückzugeben, ist
quelle