gpt4 book ai didi

python - 条件列表理解

转载 作者:太空狗 更新时间:2023-10-29 21:45:21 25 4
gpt4 key购买 nike

我正在尝试更好地理解列表推导式的工作原理。我有以下函数,如果数字是质数(我在论坛某处找到但不记得在哪里),则返回 true 或 false:

import math

def is_prime(n):
if n % 2 == 0 and n > 2:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True

如果我运行:

[x for x in range(2, num) if is_prime(x)]

我得到了想要的结果

[2, 3, 5, 7, 11, 13, 17, 19]

在尝试将整个函数转换为列表理解时,我想到了:

[x if not (x%2==0 and x > 2) else x for x in range (2, num) 
for i in range(3, int(x**(1/2))+1, 2) if not (x%i==0)]

产生:

[10, 11, 13, 14, 16, 17, 19]

不确定我哪里出错了,希望得到一些帮助。事实上,我认为在这种情况下使用该函数会更好,但正如我所说,我正在尝试理解列表理解及其功能。

最佳答案

你可以这样做:

[n for n in range(2, num) if n % 2 != 0 and n > 2 and all(n % i != 0 for i in range(3, int(math.sqrt(n)) + 1, 2))]

虽然一个类轮只是为了它不一定是好事。 IMO 像你一样使用 prime tester 函数更好......

注意:在您的尝试中不起作用的是您修改了外部列表理解的逻辑。您仍然需要像 [n for n in range(...) if (expression testing if n is prime)] 这样的结构。

关于python - 条件列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43196352/

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