gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:03:55 24 4
gpt4 key购买 nike

我想要获取 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com