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

用Python做countif的好方法是什么

姜兴业
2023-03-14
问题内容

我想计算一个可迭代对象满足给定条件的数量。我想以一种清晰,简单,最好是合理的方式进行操作。

我目前最好的想法是:

sum(meets_condition(x) for x in my_list)

len([x for x in my_list if meets_condition(x)])

第一个是基于迭代器的,对于大列表来说可能更快。它与您用于测试任何和所有测试的表单相同。但是,这取决于int(True)== 1,这有点难看。

第二个对我来说似乎更容易阅读,但是它与任何和所有形式都不同。

有没有人有更好的建议?我缺少某处的库函数吗?


问题答案:

基于迭代器的方法很好。进行一些细微的修改可以强调您正在计数的事实:

sum(1 if meets_condition(x) else 0 for x in my_list)
# or 
sum(1 for x in my_list if meets_condition(x))

和往常一样,如果意图从代码中不明显,则将其封装在描述性命名的函数中:

def count_matching(condition, seq):
    """Returns the amount of items in seq that return true from condition"""
    return sum(1 for item in seq if condition(item))

count_matching(meets_condition, my_list)


 类似资料:
  • 问题内容: 在回答了有关如何使用强制释放Java中的对象(那个家伙正在清除1.5GB的HashMap)的问题后,有人告诉我手动调用是一种不好的做法,但是注释并不完全令人信服。此外,似乎没有人敢于赞成,也没有反对我的答案。 有人告诉我这是一种不好的做法,但是后来我又被告知,垃圾收集器的运行不再系统地停止世界,而且它也可以有效地被JVM用作提示,所以我有点不知所措。 我确实知道,JVM在需要回收内存时

  • 我有一个问题,关于什么是正确的做法,使用SwingU实用程序的调用稍后方法。 所以首先,我想确认我理解正确。 据我所知,对GUI的更改必须在EDT上完成,因为Swing组件不是线程安全的。invokeLater方法将Runnable作为参数,该Runnable中包含的任何内容都将在EDT上运行。因此,对Swing组件的任何调用都被放入一种队列中,在EDT上一次执行一个。 有了这些,我的问题是:使用

  • 本文向大家介绍shouldComponentUpdate方法是做什么的?相关面试题,主要包含被问及shouldComponentUpdate方法是做什么的?时的应答技巧和注意事项,需要的朋友参考一下 shouldComponentUpdate:确定是否将更新组件。默认情况下,它返回true。如果您确定组件在状态或道具更新后不需要渲染,则可以返回false值。这是提高性能的好地方,因为如果组件收到新

  • 问题内容: 我已阅读以下讨论: 如果私有帮助器方法可以是静态的,则它们应该是静态的;如果它们的类没有成员变量,则所有方法应该是静态的。 似乎人们通常会接受静态方法,但由于以下两个原因,对此有些怀疑: 他们很难测试。 他们违反了OO原则。(一个人说,它们是函数,而不是方法。) 最可接受的静态方法是 私有静态 方法。但是,为什么为什么根本不存在静态方法呢?在什么情况下,它们是最优先采用的方法? 问题答

  • 问题内容: 过去,我使用以下方法读取大量代码: 这样做是惯例吗? 优点和缺点是什么? 在我看来,这就像完成异常的“ Agent Orange”方式 编辑 处理方法中的预期异常 引发意外异常(一对一) 不在乎错误 那是路要走吗? 问题答案: 你不应该扔。这就是为什么。 Throwable是可抛出的事物层次结构的顶部,由and组成。由于根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有

  • 问题内容: 在对另一个问题的答案发表评论时,有人说他们不确定自己在做什么。所以,我问这个问题,以便在上有它的记录,以备将来参考:到底是做什么的? 问题答案: 使用装饰器时,你将一个功能替换为另一个。换句话说,如果你有一个装饰器 然后当你说 并且你的函数f将替换为。不幸的是,这意味着如果你然后说 它会打印出来,因为那是新功能的名称。实际上,如果你查看的文档字符串f,则将为空,因为没有文档字符串,因此