Inf*_*iff 7 python list-comprehension
我试图更好地了解列表理解的工作原理。我有以下函数,如果数字是素数,则返回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
Run Code Online (Sandbox Code Playgroud)
如果我运行:
[x for x in range(2, num) if is_prime(x)]
Run Code Online (Sandbox Code Playgroud)
我得到理想的结果
[2, 3, 5, 7, 11, 13, 17, 19]
Run Code Online (Sandbox Code Playgroud)
在尝试将整个函数转换为列表理解时,我想到了:
[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)]
Run Code Online (Sandbox Code Playgroud)
产生:
[10, 11, 13, 14, 16, 17, 19]
Run Code Online (Sandbox Code Playgroud)
不知道我要去哪里错了,将不胜感激。实际上,我认为在这种情况下使用该函数会更好,但是就像我说的那样,我试图理解列表理解及其功能。
你可以这样做:
[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))]
Run Code Online (Sandbox Code Playgroud)
尽管仅仅为了它一个衬套不一定是一件好事。IMO使用像您这样的主要测试器功能会更好...
注意:在尝试中不起作用的是,您修改了外部列表理解的逻辑。您仍然想要类似的结构[n for n in range(...) if (expression testing if n is prime)]。
| 归档时间: |
|
| 查看次数: |
8996 次 |
| 最近记录: |