2017-02-15 71 views
2

我写了一个图像检查器,现在我想知道如何将此函数中的行数减少到(如果可能)一行。是否可以将功能减少到一个单一的行?

myFiles = ['image94.jpg','image95.png','image96.jpg','movie97.mov'] 
suff = ('.jpg', '.png') 

# Check if files are images 
def checker(suff): 
    imageFiles = [] 
    for files in myFiles: 
     if files.endswith(suff): 
      imageFiles.append(files) 
    return imageFiles 

if checker(suff): print checker(suff) 

回答

4

使用条件列表理解:

[filename for filename in myFiles if filename.endswith(suff)] 
+0

惊人,只有一个问题打印'[]'如果是空的? –

+2

@Rizzit:'print([])'会做到这一点,但'布尔([])== False',所以你保持你的'if'的地方,它不应该打印什么 – progo

0

尝试lambda表达式的魔..

f = lambda suff,l:filter(lambda x: '.'+x.split('.')[-1] in suff,l) 

要使用它,这样称呼它

f(suff,myFiles) 
相关问题