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

精疲力尽的迭代器-该怎么办?

陶俊晤
2023-03-14
问题内容
filtered = filter(lambda x : x is not None and x != 0, c)
ratio = max(filtered) / min(filtered)

我花了半个小时才意识到问题出在哪里(过滤器返回的迭代器在到达第二个函数调用时已经耗尽了)。如何以最Pythonic /规范的方式重写它?

另外,除了获得更多经验之外,我还可以采取哪些措施避免此类错误?(坦率地说,我不喜欢这种语言功能,因为这些类型的错误易于制造且难以捕获。)


问题答案:

您可以简单地通过调用将迭代器转换为元组 tuple(iterator)

但是我会将该过滤器重写为列表理解,看起来像这样

# original
filtered = filter(lambda x : x is not None and x != 0, c)

# list comp
filtered = [x for x in c if x is not None and x != 0]


 类似资料:
  • 问题内容: 请考虑以下情形: 在我看来,在VS2005中,在“擦除”之后,迭代器将等于end(),因此在尝试增加它时会崩溃。此处介绍的行为之间,编译器之间是否真的存在差异?如果是这样,“擦除”之后的迭代器等于UNIX / Linux中的什么? 谢谢… 问题答案: 是的,如果您删除一个迭代器,则该迭代器将获得所谓的 singular value ,这意味着它不再属于任何容器。您不能再递增,递减或读出

  • 问题内容: 如果我创建两个列表并将其压缩 然后我将z输入到两个列表中 那么,l1的内容就很好了[(1,7),(2,8),(3,9)],但是l2的内容只是[]。 我猜想这是python关于可迭代项的一般行为。但是,作为从C家族迁移的新手程序员,这对我来说没有意义。为什么会这样表现?有办法解决这个问题吗? 我的意思是,是的,在这个特定示例中,我可以将l1复制到l2中,但是总的来说,在迭代一次之后,是否

  • 目前,我使用Camel作为编排引擎(它接收HTTP POST请求,导致Camel代码向一些外部服务器发送HTTP POST/PUT/GET请求,直到最后Camel向第一个HTTP POST请求的发起者发送(希望)200 OK)。 加载工具<->骆驼代码<->外部服务器 我使用的是骆驼2.9.2。 为了检查性能,我正在使用httperf向我们的骆驼实现发送大量HTTP POST消息。当httperf

  • } 正如您所看到的,RetryHandler扩展了线程,该线程在内部列表上迭代。尽管使用了和,我还是得到了和已在其他

  • 本文向大家介绍迭代器 Iterator 是什么?相关面试题,主要包含被问及迭代器 Iterator 是什么?时的应答技巧和注意事项,需要的朋友参考一下 terator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

  • 问题内容: 当我尝试启动我们的Java服务器时,出现此错误:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 但是我在脚本所在的文件夹中有mysql-connector-java-5.1.22-bin.jar,并在运行脚本时使用它: 但是仍然得到这个。该怎么办?我正在使用CentOS服务器。 问题答案: 在中的 MANIFEST.MF 文