私はlist-comprehension
(1つのライナー)に変換する必要があるコードに従いました。しかし、私はそうすることができません。 コードでは、入力範囲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]))
EDIT
問題の制約を追加します。 コードはeval
またはexec
を除いた1つのステートメントのみです。コードの長さは最大160文字でなければなりません。
なぜ?私はこのリスト理解を解読しなければならない人を哀れに思う。 –
最初はなぜそれをリストの理解に変換したいのですか? –
私が知っているのは、ライナーソリューションを1つしか受け付けないオンライン問題の一部です。 1つのライナーを提供する他の方法がない限り。 –