Python - 检查是否有多个条件都是真的

时间:2016-07-24 15:00:23

标签: python list list-comprehension any

我正在尝试修改列表以删除文件扩展名不匹配的条目。我通过编写多个'或'条件

来实现这一点
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

2 个答案:

答案 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
>>>