【发布时间】:2017-10-06 03:43:10
【问题描述】:
我有以下代码需要转换为list-comprehension(一个班轮)。但是,我无法这样做。
该代码计算素数,直到输入范围为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 个字符。
【问题讨论】:
-
为什么?我很同情必须尝试破译此列表理解的人。
-
为什么首先要将其转换为列表理解?
-
我知道,这是一个在线问题的一部分,它只接受一个班轮解决方案。除非有其他方法可以提供一个衬垫。
-
关于在列表理解中添加中断条件 - stackoverflow.com/questions/9572833/break-list-comprehension
-
我的意思是,不推荐,但总有Oneliner-izer
标签: python lambda list-comprehension