0

すべての素数の合計を制限まで計算する短い関数があります。コンテキストの完全なコードは次のとおりです。

def primes_sum(limit):
    limitn = limit+1
    not_prime = [False] * limitn
    primes = []

    for i in range(2, limitn):
        if not_prime[i]:
            continue
        for f in xrange(i*2, limitn, i):
            not_prime[f] = True

        primes.append(i)

    return sum(primes)

これのほとんどは私には理にかなっていますが、この部分は理解できません:

not_prime = [False] * limitn

これの目的は何ですか?それはどのように機能し、素数かどうかをどのように判断するのでしょうか? 調べてみましたが、答えが見つかりません。

前もって感謝します。

4

3 に答える 3

3

すべての要素が に初期化されたlist長さの を作成しているだけです。limitnFalse

*繰り返し演算子です。オペランドとして値を指定して a に適用するListと、回数が繰り返されます。integernrightlist n

文字列に対しても使用できます。

>>> [False] * 2
[False, False]
>>> "rohit" * 2
rohitrohit
于 2013-02-19T16:40:15.047 に答える
1

値のリストを初期化しlimitn Falseます。例えば:

>>> [False]*3
[False, False, False]

IndexError基本的に、後で取得するのを防ぎます。

于 2013-02-19T16:40:16.117 に答える
0

[False]*nすべて False である n 個の要素でリストを初期化します。この初期化方法は、リストに含まれる要素の量が事前にわかっている場合に、最適化の方法としてよく使用されます。これは、.append() で要素を追加するよりもはるかに高速です。

于 2013-02-19T16:56:47.673 に答える