1

我希望使用 pop 和 remove 函数从列表 2 到 100 中删除数字,以获得素数列表。主要问题是 k 总是最终导致错误。此外,当在 之后放置打印功能时k,它只显示偶数,不知道为什么会这样。

x=[] 
for i in range(2,100): 
    x.append(i)

primes=[]

count=0

while count < 99:
    k = x[count]
    print(k)
    primes.append(k)
    """for j in range(2,100):
        if k % j ==0:
            x.remove(j)"""
    x.pop(count)
    count = count + 1

print(x)
4

3 回答 3

2

可能会发生错误,因为您在迭代列表时要从列表中删除元素。

考虑一个列表[x, y, z],您位于位置 0。如果您决定删除位置 0 处的元素,那么 Python 将继续在循环的下一次迭代中检查位置 1。但是位置然后引用元素z(因为列表中的位置 1[y, z]z,而不是y)。

于 2013-11-12T15:45:56.523 回答
2

您的超出范围:

xlen为 98,while循环计数 48 次....

您可以像这样轻松修复它(只需将 While 条件固定为count < 48):

    x=[]
    for i in range(2,100):
        x.append(i)

    primes=[]

    print len(x)

    count=0

    while count < 48:
        k = x[count]
        print(k)
        primes.append(k)
        """for j in range(2,100):
            if k % j ==0:
                x.remove(j)"""
        x.pop(count)
        count = count + 1

    print(x)
于 2013-11-12T15:45:59.600 回答
0

您根本没有测试素数。你得到的只有偶数,因为你要删除所有奇数。从逻辑角度来看,无需预先填充列表以进一步删除不需要的元素。

这是您要查找的内容:

def is_prime(n):
    if n < 2 or (n % 2) == 0:
        return n == 2

    f = 3

    while (f * f) <= n:
        if (n % f) == 0:
            return False

        f += 2

    return True

primes = [n for n in range(2, 100) if is_prime(n)]
print(primes)
于 2013-11-12T15:50:45.013 回答