操作循环以增加特定值?-蟒蛇



要使用Java中的埃拉托斯特内斯筛算法生成素数列表,我可以这样做:

public static void processSieve(boolean[] sieve)
{
    for (int i = 2; i < sieve.length; i++)
        sieve[i] = true;
    for (int i = 2; i < Math.sqrt(sieve.length); i++)
    {
        if (sieve[i] == true)
        {
            for (int j = i * 2; j < sieve.length; j += i)
                sieve[j] = false;
        }
    }
}

然而,Python没有C风格的循环,所以我不得不使用while循环来完成同样的事情:

def processSieve(sieve):
    sieve = [True for i in range(HOWMANY + 1)]
    sieve[0], sieve[1], i, j = False, False, 2, 0
    while i <= math.sqrt(len(sieve)):
        if sieve[i] == True:
            j = i * 2
            while j < len(sieve):
                sieve[j] = False
                j += i
        i += 1

可以用于…吗。。in循环来模拟上面写的Java for循环?还是我被迫只使用while循环?

您可以使用for循环:

>>> for i in range(2,10,3):
...   print i
...
2
5
8

范围(…)range([start,]stop[,step])->整数列表

Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3].  The end point is omitted!
These are exactly the valid indices for a list of 4 elements.

所以

for (int j = i * 2; j < sieve.length; j += i)

可以"翻译"为:

for j in range(i*2, len(sieve), i):

1.Python有一个for in循环,它经常与range() 一起使用

2.由于math.sqrt生成浮点数,因此应该使用int()来获得整数

3.在python 中不需要初始化i

def processSieve(sieve):  
    sieve = [True for i in range(HOWMANY + 1)]  
    sieve[0], sieve[1], j = False, False, 0
    for i in range(2, int(math.sqrt(len(sieve))):
        if sieve[i] == True:
            j = i * 2
            while j < len(sieve):
                sieve[j] = False
                j += i
        i += 1

相关内容

  • 没有找到相关文章

最新更新