我希望能更好地理解列表推导的工作原理。我有一个函数,如果一个数字是质数,则返回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]
我不确定我的错误在哪里,希望得到一些帮助。实际上,在这种情况下,我认为使用函数更好,但是像我说的,我正在尝试理解列表推导式及其功能。
[x for x in range(2, num) if is_prime(x)]
的版本为9.01秒每次循环;@Julien版本(稍作修改):12.8秒每次循环和@Harshit Garg版本:44.4秒每次循环。 - Infinity Cliff