首页 > 解决方案 > Python - 效率 - 在调用 filter() 之前检查列表是否为空?

问题描述

我有一个文件列表,我需要筛选可接受的文件类型(例如,只保留“.txt”文件)。然后,当且仅当它不为空时,我才对最终列表进行“处理”。我的原始代码(带有玩具清单)是这样的:

files = ["file1.txt", "file2.txt", "file3.jpg"]
if files:
    files[:] = filter(check_filetype, files)
    if files:
         # do something with remaining .txt files

但是,我很好奇是否需要第一个“if”语句,在过滤之前检查此列表是否为空。我测试filter()并将接受(并返回)一个空列表。

那么什么更有效,在第一个“if”语句中增加一个分支,或者过滤一个空列表?我倾向于删除第一个“if”语句。

标签: pythonperformancefilterprocessing-efficiency

解决方案


在我看来,您可以删除第一个if语句。另请注意,您可以只使用列表推导,这通常被认为更 Pythonic。filter与+ 自定义函数相比,它至少对于更大的列表应该更有效:

files = ['file1.txt', 'file2.txt', 'file3.txt']
files = [fn for fn in files if check_filetype(fn)]

if files:
    # do something

推荐阅读