我有以下代码,需要将其转换为列表理解
(一行)。但是,我无法这样做。
该代码计算 A
输入范围内的质数。
def sieve(A):
l = []
f = lambda x : int(x**0.5)
for p in range(2,A+1):
for i in range(2, f(p) + 1):
if p % i == 0:
break
else:
l.append(p)
return l
到目前为止,我遵循的方法不起作用。尤其是 for-loop
中的 break
让我很失望。
list(set([val for sublist in [[p for i in range(2, f(p) + 1) if p %i != 0 ] for p in range(2,A) ] for val in sublist]))
编辑
为问题添加约束条件。
代码只能是一条语句,不能有eval
或exec
。代码长度不得超过 160 个字符。
最佳答案
[p for p in range(2,A+1) if next((i for i in range(2, int(p**0.5) + 1) if (p % i) == 0),None)==None]
代码长度为 100 个字符。
我们使用next()打破迭代。
说明
def sieve(A):
[p for p in range(2,A+1) if getFirstDiv(p)==None]
def getFirstDiv(p):
next(divIter(p),None)
def divIter(p):
return (i for i in range(2, int(p**0.5) + 1) if (p % i) == 0)
<小时/>
输出
15 --> [2, 3, 5, 7, 11, 13]
10 --> [2, 3, 5, 7]
关于python - 使用 lambda 函数将 double for 循环转换为列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46597939/