list-comprehension
(한 라이너)으로 변환해야하는 코드를 따라했습니다. 그러나, 나는 그렇게 할 수 없다. 코드는 최대 입력 범위 A
의 소수를 계산합니다.람다 함수를 사용하여 double for 루프를 변환하고 목록 이해로 전환
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
지금까지는 어떤 방식으로 작동하지 않습니다. 특히 break
내에서 for-loop
내게 던지고있다.
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 자 여야합니다.
이유는 무엇입니까? 나는이 목록 이해력을 해독하고 해독해야하는 사람을 불쌍히 여긴다. –
왜 처음부터 목록 이해력으로 변환되기를 원하십니까? –
저는 라이너 솔루션을 하나만 허용하는 온라인 문제의 일부입니다. 하나의 라이너를 제공하는 다른 방법이없는 한. –