我有这样的事情:

palindromes=[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 101, 111, 121, ..., 99799, 99899, 99999]
# of course im generating it :)

def isPrime(number):
    for i in range(2,int(number/2)+1):
        if number%i == 0:
            return True
    return False

def removeNonPrimes(palindromes):
    for palindrom in palindromes:
        if isPrime(palindrom):
            palindromes.remove(palindrom)
    return palindromes

palindromes = removeNonPrimes(palindromes)

并不能消除所有非素数
我不知道为什么

最佳答案

在您的代码中:

def removeNonPrimes(palindromes):
    for palindrom in palindromes:
        if isPrime(palindrom):
            palindromes.remove(palindrom)
    return palindromes


您正在修改(使用.remove())与要迭代的相同列表(使用in)。不建议这样做,您最终可能会删除想要的其他项目。

相反,请考虑列表理解:

def removeNonPrimes(palindromes):
    return [p for p in palindromes if isPrime(p)]

关于python - 从列表中删除非素数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7786566/

10-12 18:13