我正在尝试修改列表以删除文件扩展名不匹配的条目。我通过编写多个'或'条件
来实现这一点from os import listdir
image_extensions = ['jpg','.png']
files = listdir('/home')
files = [x for x in files if '.jpg' in x or '.png' in x]
print files
我想让它使用image_extensions变量,以便我可以轻松添加更多条件。我试过的最新的东西失败了“要求字符串作为左操作数,而不是列表”:
from os import listdir
image_extensions = ['jpg','.png']
files = listdir('/home')
files = [x for x in files if any(s for s in image_extensions in x)]
print files
答案 0 :(得分:3)
这应该做:
files = [x for x in files if any(s in x for s in image_extensions)]
# |<-->|
检查任何扩展名是否包含在文件名x
答案 1 :(得分:0)
替代解决方案:
>>> filter(lambda f: filter(f.endswith, image_extensions), files)
与前一个答案相比,此表达式的时间分析表明前一个表达式有一些改进:
>>> import timeit
>>>
>>> timeit.timeit("import os;l = os.listdir('.');ext = ['txt', 'ini', 'cfg'];filter(lambda f: filter(f.endswith, ext), l)", number=10000)
0.6541688442230225
>>>
>>>
>>> timeit.timeit("import os;l = os.listdir('.');ext = ['txt', 'ini', 'cfg'];files=[x for x in l if any(s in x for s in ext)]", number=10000)
0.64410400390625
>>>