检查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