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

Python:在地图对象上两次调用“列表”

燕正德
2023-03-14
问题内容

我想计算不超过n的平方和。假设n为4,则此代码生成一个列表,列出范围为0到4的地图对象:

m = map(lambda x: x**2, range(0,4))

轻松一点。现在在m上调用列表,然后求和:

>>> sum(list(m))
14

意外的行为是,如果我再次运行最后一行,则总和为0:

>>> sum(list(m))
0

我怀疑这是因为调用list(m)返回了一个空列表,但是我找不到这种行为的解释。有人可以帮我这个忙吗?


问题答案:

map 在Python 3中返回一个有状态的迭代器。有状态的迭代器在耗尽后可能只消耗一次,并且不产生任何值。

在您的代码段中,您多次 使用
迭代器。list(m)每次尝试重新创建列表时,对于第二次和下一次运行,创建的列表将始终为空(因为在第一次list(m)操作中消耗了源迭代器)。

只需将迭代器转换为列表一次,然后再对该列表进行操作。

m = map(lambda x: x**2, range(0,4))
l = list(m)
assert sum(l) == 14
assert sum(l) == 14


 类似资料:
  • 当尝试将Mockito与spring一起使用时,通过bean声明创建Mock对象... ...我在调用mockito时发现了一些奇怪的行为。当多次没有重置Mock对象时,例如: 在测试过程中(在同一个模拟上)多次调用此代码(“mockito.when”)时,测试就会失败并出现错误(BadSqlGrammerException即使该异常实际上是预期的--如果不抛出异常,我会得到一个失败,并且手动抛出

  • 问题内容: 当尝试通过Spring使用Mockito时,通过bean声明创建Mock对象… …我多次调用Mockito。时发现一些奇怪的行为,而没有重置Mock对象,例如: 一旦在测试期间(在同一模拟上)多次调用此代码(“ Mockito.when”),测试就会失败并显示错误(BadSqlGrammerException,即使实际上是预期的异常,我也会失败- 如果我不抛出异常,则手动抛出该异常就可

  • 问题内容: 我想知道如果在同一个对象上同步两次,在Java中是否会出现任何奇怪的行为? 场景如下 两种方法都使用该对象并对其进行同步。当第一个方法调用第二个方法时,它会被锁定而停止吗? 我不这么认为,因为它是同一个线程,但是我不确定是否可能会出现其他任何奇怪的结果。 问题答案: 同步块使用 可重入 锁,这意味着如果线程已经持有该锁,则它可以重新获取它而不会出现问题。因此,您的代码将按预期工作。 请

  • 问题内容: 我是Python的新手,并且正在学习教程。本教程中有一个示例: 现在,在教程中,。但就我而言,我得到以下错误: 问题答案: 好像你已经用指向类实例的相同名称遮盖了指向类的内置名称。这是一个例子: 我相信这是显而易见的。Python将对象名称(函数和类也是对象)存储在字典中(命名空间实现为字典),因此你可以在任何范围内重写几乎任何名称。它不会显示为某种错误。如你所知,Python强调“特

  • 问题内容: 我现在正在做的结果是: 在第二个readEntity()上,因为它在第一次读取后关闭了流。 这是我在做什么: 问题答案: /您可以使用,这将允许您多次读取实体流。 更新资料 使用读取实体后,读取结果将被缓存,并且可用于调用。这些信息并不能真正回答OP的问题,但我认为添加信息非常有用。

  • 我是Python的新手,遵循教程。教程中有一个的例子: 现在,在教程中,。但在我的例子中,我得到了以下错误: 请告诉我我错在哪里。我搜索所以这个,但它是不同的。