python - 在Python列表理解的if子句中进行多次逻辑比较的最佳方法?

标签 python functional-programming list-comprehension

我想要获取 1 - 1000 之间所有自然数的列表,这些自然数要么是 3 的倍数,要么是 5 的倍数。

我尝试使用列表理解:

   [x for x in range(1, 1000) if x % 3 == 0 or x % 5 ==0]

这就引出了一个问题: 有没有一种很好的方法可以将 Python 列表理解的 if 子句中的许多逻辑比较串联起来?

最佳答案

我假设这是你真正的问题(强调):

Is there a nice way of stringing together many logical comparisons in the if statement of a list comprehension in Python?

您现有的代码对于两次比较来说效果很好,但如果您有 30 个比较怎么办?

实现这一点的方法是分解比较,以便您可以对它们编写理解,然后将其传递给 allany 函数。

例如,如果您的代码如下所示:

[x for x in range(1, 1000) 
 if x % 2 == 0 or x % 3 == 0 or x % 5 == 0 or x % 7 == 0 or x % 11 == 0
 or x % 13 == 0 or x % 17 == 0 or x % 19 == 0 or x % 23 == 0]

...那将是一个巨大的困惑。但你可以将其写为:

[x for x in range(1, 1000) 
 if any(x % i == 0 for i in (2, 3, 5, 7, 11, 13, 17, 19, 23)]

或者,当然,您可以将其分解为一个函数,这使您有机会命名事物:

primes529 = (2, 3, 5, 7, 11, 13, 17, 19, 23)

def composite529(x):
    return any(x % i == 0 for i in primes529)

[x for x in range(1, 1000) if composite529(x)]

关于python - 在Python列表理解的if子句中进行多次逻辑比较的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457015/

相关文章:

haskell - Haskell 中的函数保护语法

python - 此代码的列表理解或更有效的方法

python - 如何按其元素的值对列表进行排序,该值在 Python 中的不同列表中定义

python - python字典理解方法中的单行if else

c++ - Windows Python程序重启(另一种生活中的原罪)

需要 Python TKinter 线程帮助

python - 如何通过远程 API 为在 Jenkins 中触发的构建获取正确的构建号

python - 如何搁置整数键?

json - Haskell JSON 解析器的改进

java - 如何在 Kotlin 的 Map 实例上使用 `filter`?