检查string是否以列表中的某个string结尾

编写下面的代码的pythonic方式是什么?

extensions = ['.mp3','.avi'] file_name = 'test.mp3' for extension in extensions: if file_name.endswith(extension): #do stuff 

我有一个模糊的记忆, for循环的显式声明可以避免,并在if条件写入。 这是真的?

虽然不是广为人知,但str.ends也接受一个元组。 你不需要循环。

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

只要使用:

 if file_name.endswith(tuple(extensions)): 

从文件中获取一个扩展名,看它是否在扩展集中:

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

使用一个集合,因为在集合中查找的时间复杂度是O(1)( docs )。

我有这个:

 def has_extension(filename, extension): ext = "." + extension if filename.endswith(ext): return True else: return False