1

私はPythonの初心者で、Nが与えられるまで素数を計算するプログラムを書いています。これが私のコードです。私が見ているのは、numbersfor ループを介した各反復の後に、呼び出されたリストが変更されていることです。ただし、このリストがforループで変更されている間、反復しているリストには古い値への参照がまだ含まれていることがわかります。以下の出力を見てください。

def getprimes(n):
         numbers = [ i for i in range (2,n+1)]
         primes=[]
         print "numbers in the beginning",numbers

         for i in numbers:
                print i
                primes.append(i)
                print "primes",primes
                print "numbers",numbers
                numbers=[k for k in numbers if (k%i!=0)]

         print "numbers at end",numbers
         return primes


print getprimes(10)

私の出力は以下の通りです:

numbers in the beginning [2, 3, 4, 5, 6, 7, 8, 9, 10]
2
primes [2]
numbers [2, 3, 4, 5, 6, 7, 8, 9, 10]
3
primes [2, 3]
numbers [3, 5, 7, 9]
4
primes [2, 3, 4]
numbers [5, 7]
5
primes [2, 3, 4, 5]
numbers [5, 7]
6
primes [2, 3, 4, 5, 6]
numbers [7]
7
primes [2, 3, 4, 5, 6, 7]
numbers [7]
8
primes [2, 3, 4, 5, 6, 7, 8]
numbers []
9
primes [2, 3, 4, 5, 6, 7, 8, 9]
numbers []
10
primes [2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers []
numbers at end []
[2, 3, 4, 5, 6, 7, 8, 9, 10]

どんな提案やコメントも大歓迎です!. ありがとう

4

3 に答える 3