262 votes

Vérifiez si la chaîne se termine par l'une des chaînes de caractères à partir d'une liste

Qu'est-ce que le pythonic façon d'écrire le code suivant?

extensions = ['.mp3','.avi']
file_name = 'test.mp3'

for extension in extensions:
    if file.endswith(extension):
        #do stuff

J'ai un vague souvenir que la déclaration explicite de l' for boucle peut être évitée et écrit dans l' if condition. Est-ce vrai?

525voto

falsetru Points 109148

Bien que pas très connu, str.endswith accepte aussi un n-uplet. Vous n'avez pas besoin de boucle.

>>> 'test.mp3'.endswith(('.mp3', '.avi'))
True

52voto

Jon Clements Points 51556

Utilisez simplement:

if file.endswith(tuple(extensions)):

7voto

alecxe Points 50783

Prendre l'extension du fichier et voir si elle est dans l'ensemble des extensions:

>>> import os
>>> extensions = set(['.mp3','.avi'])
>>> file_name = 'test.mp3'
>>> extension = os.path.splitext(file_name)[1]
>>> extension in extensions
True

L'aide d'un jeu parce que le temps de la complexité pour les recherches dans les jeux est O(1) (docs).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X