【问题标题】:Pythonic way of checking if a condition holds for any element of a list检查条件是否适用于列表的任何元素的 Pythonic 方法
【发布时间】:2010-11-23 11:27:53
【问题描述】:

我有一个 Python 列表,我想检查是否有任何元素为负数。 Specman 具有用于列表的 has() 方法:

x: list of uint;
if (x.has(it < 0)) {
    // do something
};

其中it 是一个 Specman 关键字,依次映射到列表的每个元素。

我觉得这很优雅。我查看了Python documentation 并找不到类似的东西。我能想到的最好的办法是:

if (True in [t < 0 for t in x]):
    # do something

我觉得这很不雅。有没有更好的方法在 Python 中做到这一点?

【问题讨论】:

    标签: python list


    【解决方案1】:

    any():

    if any(t < 0 for t in x):
        # do something
    

    另外,如果您要使用“True in ...”,请将其设为生成器表达式,这样它就不会占用 O(n) 内存:

    if True in (t < 0 for t in x):
    

    【讨论】:

    • 更正:如果您打算使用True in ...,请重新考虑并改用any
    【解决方案2】:

    使用any()

    if any(t < 0 for t in x):
        # do something
    

    【讨论】:

      【解决方案3】:

      Python 有一个内置的any() 函数用于此目的。

      【讨论】:

      • 仅 2.5+。否则你必须创建一个函数,可能使用 ifilter 和异常,或者 bool(set((x for x if cond))) 等。
      • 与其做一个复杂的 ifilter 东西,不如做:def any(it): for el in it: if el: return True;返回错误
      猜你喜欢
      • 1970-01-01
      • 2022-12-01
      • 2015-03-20
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多