2017-07-17 85 views
-4

在變量noprimes聲明第二個ij循環中有什麼用?它是從第一個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

把它想象成一個雙'for'循環。如果你這樣讀它,可能會比較容易理解:'[範圍(2,8)]中的[j代表範圍內(i * 2,50,i)]'。請注意,這是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 S)如下:

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

在下一次迭代中,i = 3和新j s爲:

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

依此類推,直至i = 7。最後,您將所有這些j s一起創建爲noprimeslist

這只是Eratosthenes Sieve的執行。它收集所有(數字高達7)的倍數高達50,並且沒有包括在內的所有東西都是素數。

相關問題