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

标签 python performance filter processing-efficiency

我有一个文件列表,我需要过滤可接受的文件类型(例如,仅保留“.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”语句。

最佳答案

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

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

if files:
    # do something

关于Python - 效率 - 在调用filter()之前检查列表是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52587490/

相关文章:

C# 十进制数据类型性能

wordpress - 防止帖子重复

Python ABC 似乎允许不完整的实现

python - 将对象转换为时间 Pandas 并在时间之间进行过滤

python - 为什么我用 plotly 给箱线图上色时箱线图变窄了?

Python 包内和包外导入

MySql 查询时间过长

mysql - 如何优化 MySQL 的 ORDER BY RAND() 函数?

sharepoint - 如何使用文本字段过滤 SharePoint 列表?

java - 在 SQL 或 Java 中过滤数据?