Python-效率-在调用filter()之前检查列表是否为空?

Python-效率-在调用filter()之前检查列表是否为空?,python,performance,filter,processing-efficiency,Python,Performance,Filter,Processing Efficiency,我有一个文件列表,我需要筛选可接受的文件类型(例如,只保留“.txt”文件)。然后,当且仅当最终列表不为空时,我对其进行“填充”。我的原始代码(带玩具清单)如下: 但是,我很好奇是否需要第一个“if”语句,以便在筛选之前检查此列表是否为空。我已测试,filter()将接受(并返回)一个空列表 那么,在第一个“if”语句中添加一个额外的分支,或者过滤一个空列表,哪种方法更有效呢?我倾向于删除第一个“if”语句。在我看来,您可以删除第一个if语句。请注意,您也可以只使用列表理解,这通常被认为更像py

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

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


那么,在第一个“if”语句中添加一个额外的分支,或者过滤一个空列表,哪种方法更有效呢?我倾向于删除第一个“if”语句。

在我看来,您可以删除第一个
if
语句。请注意,您也可以只使用列表理解,这通常被认为更像python。至少,对于较大的列表,它应该比自定义函数的过滤效率更高:

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

if files:
    # do something

我也是。由于空列表不会抛出错误或弄乱任何东西,因此如果您有另一种处理空列表的方法,则可以安全地删除第一个
,最多您可以节省一次函数调用的开销,而在授予方案中,这一点不算什么。删除
if
会使代码更简单,这会在任何时候都超过浪费的CPU周期。内置过滤器已经在内部处理空列表。对我来说,如果没有必要的话。
files = ['file1.txt', 'file2.txt', 'file3.txt']
files = [fn for fn in files if check_filetype(fn)]

if files:
    # do something