我需要将以下代码转换为list-comprehension
(单行)。但是,我无法这样做。 该代码计算最高输入范围A
的素数。用lambda函数将循环转换为double并打破列表理解
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个字符。
为什么?我怜悯那个必须尝试破译这个列表理解的人。 –
为什么首先你想把它转换成列表理解? –
我知道,这是一个在线问题的一部分,只接受一个班轮解决方案。除非有其他方式提供一条衬里。 –