python - 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”语句。
解决方案
在我看来,您可以删除第一个if
语句。另请注意,您可以只使用列表推导,这通常被认为更 Pythonic。filter
与+ 自定义函数相比,它至少对于更大的列表应该更有效:
files = ['file1.txt', 'file2.txt', 'file3.txt']
files = [fn for fn in files if check_filetype(fn)]
if files:
# do something
推荐阅读
- sql - 查询以 'YYYY-MM-DD' 格式显示计划 ID 和日期,并将列命名为 FormattedDate
- arrays - 删除索引时的Vue反应性问题
- excel - 在缺少引用删除期间加载 DLL 时出错
- go - 如何为其他结构的字段执行结构的方法
- c++ - 您可以在 Arduino 字符串中存储多少字节?
- r - 如何创建一个循环来比较同一数据框中的(表)变量?
- angularjs - 具有动态黑名单的 AngularJS 自定义验证指令
- jquery - 从jquery中的部分ID中检索完整ID
- pie-chart - 如何在 Spotfire 中为是和否的答案创建饼图而不显示是/否的百分比?
- c# - FFImageLoading 在 Android 中引发异常并出现错误:System.TypeLoadException:由于找不到方法,无法加载方法覆盖列表: