2017-09-09 5 views
2

私は1と100の間の素数を見つけようとしています。素数を見つけるためのこれらのスニペットの違いは何ですか?

これを達成するには百万の方法があるはずですが、私はおそらくかなりばかな行を書きました。

pnumber = [] 
for x in range(2, 101): 
    for i in range(2, x): 
     if all(x % i): 
      pnumber.append(x) 
print(pnumber) 

これは動作しませんが、このコードを試しても機能します。

pnumber = [x for x in range(2, 101) if all(x % i for i in range(2, x))] 
print(pnumber) 

最初の試行で何が間違っていますか?それは2回目の試し書きの愚かな方法ではありませんか?

答えて

2

あなたのコードスニペットは、ループの等価等価ではありません(任意の発電機や理解の表現を使わずに)::

pnumber = [] 
for x in range(2, 101): 
    for i in range(2, x): 
     if x % i == 0: 
      break 
    else: 
     pnumber.append(x) 
print(pnumber) 

は、より良い代数にセット表記法を考え、第二の方法を理解するために
+0

うわー!!ありがとうございました! –

+0

私が...他に使うことができるかどうか分からなかった –

2

あなたの最初の試みは、次のようになります。

pnumber = [] 
for x in range(2, 101): 
    if all(x % i for i in range(2, x)): 
     pnumber.append(x) 
print(pnumber) 

あなたの2回目の試行は、基本的に速度が同じである最初の1、のちょうど1つのラインバージョンですが、短く、そしてリストの内包と呼ばれています。 2つの方法を比較すると、類似点が表示されます。だろう

# In algerba: 
evens = {x : x mod 2 = 0} 
# In python (you need a finite set of numbers for x): 
evens = [x for x in range(2,10) if x%2==0] 

# In algerba: 
primes = {x : for any 1<y<x, x mod y =/= 0} 
# In python (you need a finite set of numbers for x): 
primes = [x for x in range(2, 101) if all(x % y != 0 for y in range(2, x))] 
+0

うわー、ありがとう! –

関連する問題