当前位置: 首页 > 面试题库 >

在项目列表上调用一个函数的最简洁方法

江新
2023-03-14
问题内容

在python 2中,我曾经map将函数应用于多个项目,例如,删除了所有与模式匹配的项目:

map(os.remove,glob.glob("*.pyc"))

当然,我忽略的返回码os.remove,我只想删除所有文件。它创建了一个列表的临时实例,但没有成功。

使用Python 3时,map返回的是迭代器而不是列表,所以上面的代码什么都不做。我找到了一种解决方法,因为os.removereturns
None,我用any它强制对整个列表进行迭代,而不用创建list(更好的性能)

any(map(os.remove,glob.glob("*.pyc")))

但这似乎有些危险,特别是将其应用于返回内容的方法时。使用单行代码而不创建不必要的列表的另一种方法?


问题答案:

map()返回生成器而不是列表的更改(以及从2.7到3.x的许多其他功能)是一种节省内存的技术。在大多数情况下,更正式地写出循环不会影响性能(出于可读性的考虑,它甚至是首选)。

我将提供一个示例,但@vaultah在注释中将其固定:仍然是一线:

for x in glob.glob("*.pyc"): os.remove(x)


 类似资料:
  • 问题内容: 尝试概括我的问题…我想为SELECT语句返回的每个结果执行一个存储过程。 精神上,我想尝试类似EXEC myStoredProc(从某个表的SELECT ID中选择cond = @param) 与我的特定案例有关的更多详细信息…我有一个SaaS应用程序。我想从系统中删除一个租户。在删除租户之前,我必须删除与该租户关联的数据库中的所有记录。 租户拥有诸如包含许多不同类型字段的表单之类的项

  • 问题内容: 在JavaScript中实现单例模式的最简单/最干净的方法是什么? 问题答案: 我认为最简单的方法是声明一个简单的对象文字: 如果您希望单例实例上有私人成员,则可以执行以下操作: 这就是所谓的模块模式,它基本上可以让你来封装对象私有成员,通过采取利用的优势关闭。 更新: 我想补充一点,如果要防止修改单例对象,可以使用ES5 方法冻结它。 这将使对象不可变,从而防止对其结构和值进行任何修

  • 想法12中是否有一种简单的方法可以在“最近的项目”列表中重命名一个项目?

  • 问题内容: 假设我有汽车清单: 如何缩短上面的代码?简而言之,如何在List的每个元素上调用方法? 例如,在Python中: 问题答案: 更新: 有关使用lambda表达式的Java8解决方案,请参见aaiezza的答案。 Java 8之前的原始答案: 使用Guava可以实现效果,实现比您现有的更加冗长: (请记住,返回的视图将延迟应用该函数- 如果要立即复制,则需要将返回的列表复制到新列表中。)

  • 问题内容: 我目前正在尝试递归删除目录…奇怪的是,我能够找到的最短代码是以下结构,采用了一个 临时内部类 并且采用了 访问者模式 … 资料来源:这里 鉴于新的API消除了太多的混乱和样板,这让人感到非常笨拙和冗长。 有没有更短的方法可以实现强制递归目录删除? 我正在寻找纯本地Java 1.8方法,所以请不要链接到外部库… 问题答案: 您可以结合使用NIO 2和Stream API。 -返回以下所有

  • 问题内容: 我有这样的示例列表: 现在,我检查它是否具有空字符串,如下所示: 这可以正常工作,因为它可以打印True,但是是否需要更多的pythonik方法? 问题答案: 您可以使用: 万一如果内部列表更大(超过100个项目),则与生成器一起使用的速度将比上面的示例更快,因为这样,使用Python for循环的速度代价将由快速操作来补偿: 时序比较: