2017-07-17 12 views
-4

変数noprimesで、jのループで第二のiを宣言するのは何ですか?最初のiループから値を取っていますか、またはiの値を参照していますか?以下のプログラムを具体化してください

>>> noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)] 
>>> primes = [x for x in range(2, 50) if x not in noprimes] 
>>> print primes 
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 
+0

2重の 'for'ループと考えてください。あなたがこれを読んだら理解しやすいかもしれません: '[範囲内のj(i * 2,50、i)の範囲(2、8)]' '。これは有効なPythonの考えではないことに注意してください。 –

答えて

2

ループをダブルforと考えてください。

[j for j in range(i*2, 50, i) for i in range(2, 8)] # **Not valid Python!** 

またはこの:あなたはこのようにそれを読めば、理解しやすいかもしれません最初の外側のループの繰り返しで

noprimes = [] 
for i in range(2, 8): 
    for j in range(2 * i, 50, i): 
     noprimes.append(j) 

iは2したがってjで、range(4, 50, 2)範囲を実行します。

j = [4, 6, ..., 48] 
次の反復で

i = 3と新しいj sは、次のとおりです:結果として、それが生成する数字(j複数)は以下のとおりである

j = [6, 9, ..., 48] 

そしてそうにi = 7まで。最後に、jをまとめてnoprimeslistを作成します。

これは単にEratosthenes Sieveの実装です。それは50までのすべての倍数(最大7までの数字)を集め、そこに含まれていないものは全てプライムです。

関連する問題