次のコードを1行で記述しようとしています。フローコントロールを使用したネストされたリストの理解
for x in range(a, b+1):
prime = True
for y in range(2, int(x**0.5)):
if x%y == 0:
prime = False
break
if prime:
return x
これは、aとbの間の素数を検索します。各素数をリストに保存します。上記のコードは、範囲内の各数値を素数性をチェックしています。問題は、このネストされたループを1行のリストの理解として書く必要があることです。私が持っている問題は、リストの理解が2番目のループを通らないということです。それは2でチェックし、ループから飛び出します。
私はこのアプローチを試みたが、それは無残に失敗しました: ([x for x in range(10, 21) for y in range(2, int(x**0.5)) if x%y != 0])
あなたが示したコードは意味がありません。 'next'はイテレータで呼び出すことのできる組み込み関数ですが、ここで使用しているようなステートメントではありません。あなたはおそらく「続ける」という意味ですか?これはステートメントですが、正しく動作するためにはアルゴリズムが必要と思う外側のループを続行しません。 'if'で' break'を使い、 'for'ループ(Python構文の奇妙なビット)に付けられた' else'ブロックに 'return'行を置くことで、これを動作させることができます。 – Blckknght
なぜそれがループから "ポップ"すると思いますか?あなたが提示したコード行は目に見える出力を生成しません。大括弧で囲まれたコードの部分は、通常は変数名にバインドするリスト内包です。たとえば、それを印刷することができます。その場合にのみ、その中に何かがあるかどうかを確認します。 –
なぜそれをリストの理解として書くのですか?リストは必要ありません。単一の値が必要です。 – chepner