【问题标题】:How can I use predicates in Python如何在 Python 中使用谓词
【发布时间】:2020-07-22 20:12:16
【问题描述】:

我想以更具声明性的方式使用 python,尽可能多地使用谓词来简化事情,但我无法理解如何在 python 中“简单”地做到这一点。

例如,在计算列表中的项目时,我希望能够传入谓词,如下所示:

mylist.count(lambda x: x.contains("f"))

计算列表中包含和“f”的项目。

我可以看到如何使用 itertools 做到这一点:

sum(map(lambda x: 1 if x.contains("f") else 0, l))

但这比 for 循环更糟糕。是我遗漏了什么还是 Python 不允许这种表达方式?

【问题讨论】:

  • sum(x.contains("f") for x in l); boolint 的子类,bool 值的序列可以直接求和。

标签: python predicate declarative


【解决方案1】:

“最简单”(或至少,最可分解)的方式是使用operator.methodcallersum

from operator import methodcaller

p = methodcaller("contains", "f")
sum(map(p, l))

这是因为contains 返回一个bool 的实例,它是int 的子类。

您还可以使用生成器表达式从过滤的可迭代对象中创建1s 序列。

sum(1 for x in l if x.contains("f"))

【讨论】:

  • sum(x.contains("f") for x in l)
  • 呃,我怎么忘记在我的答案中包含这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2023-02-10
  • 2013-11-04
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多